实体框架分组子集合
本文关键字:子集合 框架 实体 | 更新日期: 2023-09-27 18:15:46
我使用实体框架6,我有这样的数据库结构(简化):
事务- - - - - - Id- - - - - - DateTime-…
产品- - - - - - Id——名称
TransactionsItems- - - - - - Id——TransactionId——ProductId
如你所见,交易<->产品是多对多类型。
我不知道如何使用LINq按产品分组事务-类似
transactions.GroupBy(t => t.TransactionsItems.Product)
其中TransactionsItems属性是由实体框架生成的导航属性,包含与此事务相关的项的集合。
我知道我可以迭代所有的产品,然后搜索transactionItems并积累数据,但我想知道是否有更简单的方法来实现我的目标?
也许你只是按特定的列分组:
transactions.GroupBy(t => t.TransactionsItems.Product.Name)
就像@ ieagle说的,EF中不需要链接表。但是,如果必须使用此结构,则应该使用以下行:
var result = transactionItems.GroupBy(k => k.ProductID, k => trans
.FirstOrDefault(q => q.TransactionID == k.TransactionID));
编辑:我已经附上了我的整个测试代码:
class Product
{
public string Name { get; set; }
public int ProductID { get; set; }
}
class Transaction
{
public string MyProperty { get; set; }
public int TransactionID { get; set; }
}
class Connect
{
public int ProductID { get; set; }
public int TransactionID { get; set; }
}
和程序本身:
class Program
{
static void Main(string[] args)
{
List<Product> products = new List<Product>();
products.Add(new Product(){ProductID = 1});
products.Add(new Product(){ProductID = 2});
List<Transaction> trans = new List<Transaction>();
trans.Add(new Transaction(){TransactionID = 10});
trans.Add(new Transaction(){TransactionID = 20});
trans.Add(new Transaction() { TransactionID = 50 });
List<Connect> con = new List<Connect>();
con.Add(new Connect(){TransactionID = 10, ProductID = 1});
con.Add(new Connect(){TransactionID = 20, ProductID = 1});
con.Add(new Connect() { TransactionID = 50, ProductID = 2 });
var r1 = con.GroupBy(k => k.ProductID, k => trans.FirstOrDefault(q => q.TransactionID == k.TransactionID));
}
}