用于简单数据模型和多对多关系的 Optimal Entity Framework 4 查询
Posted
技术标签:
【中文标题】用于简单数据模型和多对多关系的 Optimal Entity Framework 4 查询【英文标题】:Optimal Entity Framework 4 query for a simple data model and many-to-many relationships 【发布时间】:2011-10-03 17:52:55 【问题描述】:我有一个简单的数据模型,我首先使用 EF4.1 代码(但问题似乎与任何 EF4 方法有关)作为 ORM 来存储和检索数据。 该模型看起来有点像:
public class Customer
public int CustomerId get; set;
public string Name get; set;
public virtual List<Product> Products get; set;
public class Product
public int ProductId get; set;
public string Name get; set;
public virtual ICollection<Event> Events get; set;
public virtual ICollection<Customer> Customers get; set;
public class Event
public int EventId get; set;
public string Name get; set;
public virtual List<Product> Products get; set;
所以实体关系是这样的:
客户-----产品-----事件
一个事件会影响 N 个产品(例如,涨价或产品交易) 每个客户都有 N 个属于他的产品。
现在,对于数据库中的每个事件,我想获得一组(注意非重复条目)受此事件影响的客户。如果客户至少有一种产品受事件影响,则客户会受到事件影响。
天真的实现是:
foreach (var ev in context.Events)
foreach(var product in ev.Products)
//Check for customers with this product and add them to the list of affected customers
但这似乎是一种反模式。问题是: 如何编写查询以更有效地解决此问题? (也许是 linq,但即使是原生 SQL 也会有所帮助)?
【问题讨论】:
【参考方案1】:您可能正在寻找这样的查询:
var query = from ev in context.Events
select new
Event = ev,
AffectedCustomers = (from pr in ev.Products
from cu in pr.Customers
select cu).Distinct()
;
【讨论】:
谢谢,这似乎是我想要的......我想是时候提高 l2e 技能了 :)以上是关于用于简单数据模型和多对多关系的 Optimal Entity Framework 4 查询的主要内容,如果未能解决你的问题,请参考以下文章