实体框架组由儿童集合

时间:2015-10-02 13:25:16

标签: c# .net entity-framework linq

我使用Entity Framework 6,我有这样的数据库结构(简化):

交易 - ID - 约会时间 - ......

产品 - ID - 姓名

TransactionsItems - ID - TransactionId - ProductId

如您所见,关系交易< - >产品种类繁多。

我不知道如何使用LINq对产品进行分组 - 类似于

transactions.GroupBy(t => t.TransactionsItems.Product)

其中TransactionsItems属性是由实体框架生成的导航属性,包含与此事务相关的项集合。

我知道我可以迭代所有产品,然后搜索transactionItems并积累数据,但我想知道是否有更简单的方法来实现我的目标?

2 个答案:

答案 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)