有没有人知道Linq-to-Sql中正确的多对多实现的示例? 通常我在DataContext中使用中间实体(例如CustomerProducts),并在每次查询时加入它。
我们的想法是通过向部分类添加自定义属性来隐藏对象级别的中间实体 - 在每个查询中使用IEnumerabe Customer.Products和IEnumerable Product.Customers之类的集合,但我无法编写将正确转换为SQL的代码子查询。
这应该以这种或类似的方式使用:
int ProductID = 555;
Customers.Where(customer=>customer.Products.Any(product=>product.Id == productID));
当然,只有SQL级别。
或许我想念一些东西,这不是一个正确的方法?
UPD。我正在寻找一种通过一些SQL操作摆脱中间实体的方法。当然,我可以包装现有的代码。
答案 0 :(得分:1)
我没有对此进行过测试,但也许问题是您希望使用IEnumerable而不是IQueryable?
建议尝试以下方法:
public partial class Customer
{
public IQueryable<Order> Orders
{
get
{
return this.CustomerOrders.Select(co => co.Order);
}
}
}