Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得';键入名称';LINQ语句中的派生实体的;不识别方法';System.Type GetType()”类型;_C#_Linq_Entity Framework_Inheritance - Fatal编程技术网

C# 如何获得';键入名称';LINQ语句中的派生实体的;不识别方法';System.Type GetType()”类型;

C# 如何获得';键入名称';LINQ语句中的派生实体的;不识别方法';System.Type GetType()”类型;,c#,linq,entity-framework,inheritance,C#,Linq,Entity Framework,Inheritance,我想知道是否有可能获得从同一基本实体继承的实体类型。当我使用下面的 var db.BaseClass.Select(a => new { Type = a.GetType().Name }); 我发现“LINQ to Entities无法识别方法'System.Type GetType()'方法”错误。我需要知道从基类继承的实体的类名。我知道我可以用这个: var derivedClass1Items = db.BaseClass.OfType<DerivedClass1

我想知道是否有可能获得从同一基本实体继承的实体类型。当我使用下面的

   var db.BaseClass.Select(a => new { Type = a.GetType().Name });
我发现
“LINQ to Entities无法识别方法'System.Type GetType()'方法”
错误。我需要知道从基类继承的实体的类名。我知道我可以用这个:

  var derivedClass1Items = db.BaseClass.OfType<DerivedClass1>().Select(a => new { Type = "DerivedClass1" });
   var derivedClass2Items = db.BaseClass.OfType<DerivedClass2>().Select(a => new { Type = "DerivedClass2" });
var-derivedClassItems=db.BaseClass.OfType().Select(a=>new{Type=“DerivedClass1”});
var derivedClass2Items=db.BaseClass.OfType().Select(a=>new{Type=“DerivedClass2”});
然而,这看起来很麻烦。对于第一种方法,是否有一种方法可以做到这一点,即使用带有单个LINQ语句的
BaseClass

更新

这是我真正的课程:

Like
:LikeId,LikeDate,whoslike,WhoseLiked*基类

PostLike
:PostId*继承的类

CommentLike
:CommentId*继承的类


ReplyLike
:ReplyId*继承类

我认为这是最好的解决方案

var db.Likes.Select(a => new 
    {
        Type = a.PostLike != null 
                ? "PostLike" 
                : a.CommentLike !=null 
                    ? "CommentLike" 
                    : a.ReplyLike != null 
                        ? "ReplyLike"
                        : null
    });

但是通过这种方式,您需要保留继承以使用0:1导航属性

为什么要首先选择类型列表?这样做似乎没有实际的理由?您将得到的只是一个类型列表,没有任何有意义的数据将其绑定到实体,这似乎是一个XY问题。@AllMadHare当然我有一些其他属性,但没有包括在这里,因为它们与实际问题无关。最后,LINQ查询必须转换为SQL查询。LINQTO实体不知道如何将
GetType()
转换为SQL函数(没有等效的SQL函数)。您必须首先执行查询,并使用内存中的结果对象进行投影:
db.BaseClass.AsEnumerable().Select(x=>new{Type=x.GetType().Name})
。不过,我很想知道
BaseClass
是如何定义的。你是先用EF代码创建的吗?@JasonBoyd是的,我是先用EF代码添加我的类的。好吧,我仍然在想这在实践中是如何工作的。在我看来,
db.BaseClass
总是返回基类对象。我认为它永远不会返回更派生的类型。