我的模型如下
class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
class Employee : Person
{
public string Dep { get; set; }
}
class Client : Person
{
public string Type { get; set; }
}
现在,我想通过Person
的属性查询Employee
,如下所示
context.Set<Person>().Where(x => ((Employee)x).Dep == "dep").ToList();
但是我收到以下错误
无法投放类型&#39; DomainModel.Person&#39;输入 &#39; DomainModel.Employee&#39 ;. LINQ to Entities仅支持转换EDM 原始或枚举类型。
我知道我可以简单地使用
context.Set<Employee>().Where(x => x.Dep == "dep").ToList();
但问题是我使用通用搜索控件,该控件只能处理一种搜索类型,搜索条件会传递给该控件,因为确定类型的lambda表达式和搜索语句也会返回将控件搜索为lambda表达式,然后将其作为谓词传递给Where
方法,现在我想使用此搜索控件同时搜索Employee
和Person
,并且因为搜索控件只能处理我传递父类型的一种类型Person
,以便我可以在搜索中访问其所有子类型属性,但我遇到了上面提到的问题。有什么想法吗?
答案 0 :(得分:4)
在EF继承方面,LINQ to Entities查询不支持cast
运算符。但是,is
和as
运算符完全受支持,因此编写此类过滤器的正确方法如下:
context.Set<Person>()
.Where(x => x is Employee && (x as Employee).Dep == "dep")
.ToList();