inheritanceLinqtoSQLclassesandtransformtheresultsoflinqclasses员工、车辆等)。设计是这样的,有一个实体表和第二个具有类型特定值的表,例如,员工将有一个ID号,但车辆将有一个注册号。我继承自从数据上下文生成的类实体,但在我的存储库中转换它时遇到问题。这样做的正确方法是什么?publicclasscAccountEmployee:cAccountEntity{publicstringid_number{get{try{returnthis.cAccountEntityValues.Single(e=>e.type==1).value;}赶上(异常){返回“”;}}set{try{this.cAccountEntityValues.Single(e=>e.type==1).value=value;}catch(Exception){this.cAccountEntityValues.Add(newcAccountEntityValue(){accountentity_id=this.id,cAccountEntity=this,type=1,value=value});然后在我的存储库中(不继承任何东西)publicIEnumerableAll(intaccountholder_id){returndb.cAccountEntities.Where(e=>e.accountholder_id==accountholder_id).OrderBy(a=>a.name).投掷();}publiccAccountEmployeeSingle(intid){returndb.cAccountEntities.Single(a=>a.id==id)ascAccountEmployee;}在单一方法中转换失败,所以我返回null。我的理解是您不能从基类定义显式或隐式运算符?如何将基类Linq结果转换为继承的Employee类,同时仍保持其数据库状态以便我可以提交更改?对于LINQ-to-SQL,可以通过两种方式使用继承:LINQ-to-SQL不支持多表继承(即具有来自多个表的数据的单个对象)。实体框架可以,但更复杂;在EF中使用.Cast和.OfType根据子类型进行转换/过滤。你可能想看看:这里的基类有什么用?如果它添加了行为,那么您可以编辑dbml来为所有实体指定一个公共基类。如果它具有数据属性,那么它会变得更加棘手。就个人而言,我根本不会这样做......我会为不同的类型保留单独的类,并正确使用数据上下文,每种类型都有一个单独的表:publicIEnumerableAll(intaccountholder_id){returndb.Employees.Where(e=>e.accountholder_id==accountholder_id).OrderBy(a=>a.name);}publicEmployeeSingle(intid){returndb.Employees.Single(a=>a.id==id);那么-你能澄清一下cAccountEntity在这里做什么吗?感谢您的输入,将考虑一些建议...帐户实体背后的想法是,到目前为止,该站点只需要处理员工,但将来他们可能想向系统添加车辆等,系统是用于将成本分配给实体,因此为此目的,员工被视为与车辆相同。这个想法是,员工和车辆需要在数据库等中进行相同的处理,但需要的信息略有不同。这是一个复杂的设计,只是因为他们想稍后添加其他类型,但不需要升级数据库......但是,在我的代码中,我想谈论一个员工而不是一个通用的实体类型(在mvc使用控制器、视图等的应用程序更容易)。由于您无法提供从基类到派生类的用户定义转换,因此我跳过了继承它并使用了以下解决方案。有点麻烦,但它有效......如果有人能看到更好的方法,请告诉我。公共类cAccountEmployee{私有cAccountEntity实体;publicintid{get{返回this.entity.id;}设置{this.entity.id=value;}}publicstringname{get{returnthis.entity.name;}set{this.entity.name=value;}}publicintaccountholder_id{get{returnthis.entity.accountholder_id;}设置{this.entity.accountholder_id=value;}}publicSystem.Data.Linq.EntitySetcAccountEntityValues{get{returnthis.entity.cAccountEntityValues;}}publiccAccountHoldercAccountHolder{get{returnthis.entity.cAccountHolder;}}publiccAccountEmployee(){this.entity=newcAccountEntity();}publiccAccountEmployee(cAccountEntityentity){this.entity=entity;}publicstringid_number{get{try{returnthis.entity.cAccountEntityValues.Single(e=>e.type==1).value;}赶上(异常){返回“”;}}set{try{this.entity.cAccountEntityValues.Single(e=>e.type==1).value=value;}catch(异常){this.entity.cAccountEntityValues.Add(newcAccountEntityValue(){accountentity_id=this.id,cAccountEntity=this.entity,type=1,value=value});}}}}//在存储库中publiccAccountEmployeeSingle(intid){returnnewcAccountEmployee(db.cAccountEntities.Single(a=>a.id==id));如何将基类Linq结果转换为继承的Employee类这不是向上,这是一个挫折我不认为你理解转换或者也许–实例类型和引用类型。publicclassAnimal{}publicclassZebra:Animal{}publicclassZoo{publicvoidShowZebraCast(){动物a=newAnimal();斑马z=(斑马)a;}}System.InvalidCastException:Cannotcasttype'Animal"objectiscastto"Zebra".以同样的方式你有一个实体实例,你不能向下转换使用Employee引用反对它。你可以转换类型,但你必须提供一种转换方法。以上就是C#学习教程的全部内容:继承LinqtoSQL类及linq查询结果的转换。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicpartialclassAnimal{}publicclassZebra:Animal{}//在另一个文件中publicpartialclassAnimal{publicZebraToZebra(){returnnewZebra(){//在此处设置Zebra属性。};}}publicclassZoo{publicvoidShowZebraConvert(){Animala=newAnimal();斑马z=a.ToZebra();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
