【问题标题】:Is there Any Better Way For This Linq to Sql Group By这个 Linq to Sql Group 有没有更好的方法?
【发布时间】:2011-08-14 04:25:54
【问题描述】:

有没有更好的方法来通过代码编写这样的 linq2sql 组?与 T-SQL 版本相比,它似乎太长了,并且似乎会遇到性能问题。

var Result = (
    // [ 1. JOIN
    from l in db.Lists
    where l.ProfileID == ID
    join item in db.Items on l.ID equals item.ListID into ListItem
    //orderby l.CreateDate descending
    // ] 

    // [ 2. JOIN - 1. GROUPBY
    from l_item in ListItem.DefaultIfEmpty() // left join için
    group l_item by new { 
        l.CategoryID, 
        l.CreateDate,
        l.Header,
        Min_ItemListID = ListItem.Min(c=>c.ListID)
    } into G_List
    join i_photo in db.ItemPhotos on G_List.Key.Min_ItemListID equals i_photo.ItemID into ListItem2
    // ] 

    // [ 2. GROUPBY
    from ll_item in ListItem2.DefaultIfEmpty()
    group ll_item by new {
        G_List.Key.CategoryID, 
        G_List.Key.CreateDate,
        G_List.Key.Header, 
        G_List.Key.Min_ItemListID,
        Min_ItemPhoto_FileName = ListItem2.Min(c=>c.FileName)
    } into GG_List
    // ] 

    select new TList.General_ListViewModel
    {
        CategoryID = GG_List.Key.CategoryID,
        CreateDate = GG_List.Key.CreateDate,
        Header = GG_List.Key.Header,
        FirstImageURL = GG_List.Key.Min_ItemPhoto_FileName
    }
);

【问题讨论】:

  • 您最好自己尝试重写它,然后在遇到困难时向我们寻求帮助。
  • 我建议不要为此使用 linq。相反,编写一个存储过程或视图并完成它......
  • 我有点不同意,除非绝对必要,否则我不会将此推送给 SP。

标签: c# tsql linq-to-sql


【解决方案1】:

我认为您不需要外部连接部分,您已经使用 group join 将所有内容分组(通过 join ... into)。我相信您可以将该查询简化为:

var query =
    from list in db.Lists
    where list.ProfileID == ID

    join item in db.Items on list.ID equals item.ListID into listItems
    //orderby list.CreateDate descending

    join photo in db.ItemPhotos
        on listItems.Min(c=>c.ListID) equals photo.ItemID into listPhotos

    select new TList.General_ListViewModel
    {
        CategoryID = list.CategoryID,
        CreateDate = list.CreateDate,
        Header = list.Header,
        FirstImageURL = listPhotos.Min(c=>c.FileName),
    };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多