我使用Entity Framework 6,我有这样的数据库结构(简化):
交易 - ID - 约会时间 - ......
产品 - ID - 姓名
TransactionsItems - ID - TransactionId - ProductId
如您所见,关系交易< - >产品种类繁多。
我不知道如何使用LINq对产品进行分组 - 类似于
transactions.GroupBy(t => t.TransactionsItems.Product)
其中TransactionsItems属性是由实体框架生成的导航属性,包含与此事务相关的项集合。
我知道我可以迭代所有产品,然后搜索transactionItems并积累数据,但我想知道是否有更简单的方法来实现我的目标?
答案 0 :(得分:1)
就像@ieaglle所说,你不需要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));
}
}
答案 1 :(得分:1)
也许您只需要按特定列进行分组:
transactions.GroupBy(t => t.TransactionsItems.Product.Name)