Sis*_*hus 4 c# children entity-framework
我有如下模型
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; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想按如下Person属性查询Employee
context.Set<Person>().Where(x => ((Employee)x).Dep == "dep").ToList();
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
无法将类型“ DomainModel.Person”强制转换为类型“ DomainModel.Employee”。LINQ to Entities仅支持强制转换EDM基本类型或枚举类型。
我知道我可以简单地使用
context.Set<Employee>().Where(x => x.Dep == "dep").ToList();
Run Code Online (Sandbox Code Playgroud)
但是问题是我使用了通用搜索控件,该控件只能处理一种类型的搜索,搜索条件将作为该确定类型的lambda表达式传递给该控件,并且搜索语句也将返回为这则作为谓词传递lambda表达式Where的方法,现在我想用这个搜索控制搜索Employee,并Person在同一时间,因为搜索控件可以只处理一种类型的我通过父类型它是Person如此我可以在搜索中访问其所有子类型属性,但是遇到了上面提到的问题。任何的想法?
当涉及到EF继承时,castLINQ to Entities查询不支持该运算符。但是,完全支持isand as运算符,因此编写此类过滤器的正确方法如下:
context.Set<Person>()
.Where(x => x is Employee && (x as Employee).Dep == "dep")
.ToList();
Run Code Online (Sandbox Code Playgroud)