是否可以从LinqToSql(或EF)查询中返回多个实体(查询在方法内),以便结果仍然可以组合?
这样的事情:
public IQueryable<KeyValuePair<Customer, Product>> GetCustomerEntities()
{
return
(
from customer in this.Context.Customers
join
product in this.Context.Products on customer.ID equals product.CustomerID
select new KeyValuePair<Customer, Product>(customer, product)
);
}
然后我想使用此方法的结果进一步构成查询,如:
this.GetCustomerEntities().Where(e => e.Key.Name == "my customer")
上面的方法编译但LinqToSql无法执行,因为它无法将 KeyValuePair 转换为SQL,这是预期的行为。
有可能以某种方式实现这一目标吗?
答案 0 :(得分:1)
这里的问题是运行时无法看到将customer
传递给构造函数参数与查看e.Key
是一回事,因为这两件事显然不相同。您可以尝试使用getter和setter创建自己的POCO类型,即
select new CustomerProduct { Customer = customer, Product = product }
并使用它代替KeyValuePair<Customer,Product>
。
在单个方法中,匿名类型将是显而易见的选择。
答案 1 :(得分:0)
this.GetCustomerEntities().ToList().Where(e => e.Key.Name == "my customer")
那应该有用。它不是最有效的东西,但它至少会运行。一旦枚举(使用ToList()),可查询将在SQL服务器上执行,任何进一步的操作将在内存中的枚举上。这允许您自由使用KeyValuePair类。
如果你想进一步专门构建查询以利用SQL,那么你应该参数化你的函数,并且首先只从数据库中获取你想要的行。