是否可以使用 LINQ to SQL 进行条件投影?假设我有一个名为 PersonTable 的 SQL 表。在 C# 中,我有几个类:
public interface Person
{
int employeeType; //1 is employee, 2 is manager
String name;
}
和两个派生类。为简单起见:
public class Employee : Person {}
public class Manager : Person {}
现在,我想使用 LINQ to SQL 根据employeeType 投影到适当的派生类:
IQueryable<IPerson> = PersonTable.Select(x => //x.employeeType == 1 ? new Employee { } : x == 2 {new Manager {} )
这对于这种情况是可以的,但是我有一种情况,我试图实例化 7 种不同的可能派生类型,所以条件会变得又长又难看。此外,在我的真实世界场景中,接口/派生类有 15 个左右的属性要填充;这也会很快变得又长又丑。
我的第一次尝试是编写一个返回适当类型的表达式树,但这不起作用,因为我需要知道参数表达式的值才能正确调用 Expression.MemberInit。对于像这样使用 LINQ to SQL 的大型条件初始化,哪种解决方案可能是最好的。
我不能使用表继承,因为我正在投影中创建数据传输对象。我也考虑过使用 where 和 union,但表达式树路径似乎更有趣,因为我将有一个位置来维护代码,而不是每次引入新的派生类时 - 如果这是一个甚至是一个选项。