【问题标题】:SQL to LINQ Involving Multiple GroupJoinSQL to LINQ 涉及多个 GroupJoin
【发布时间】:2021-06-05 10:40:38
【问题描述】:

我有一个 SQL 查询并想转换为 LINQ 方法语法 (Lambda),但我似乎被困在多组连接中,这让我很困惑。 下面是我想改成LINQ的SQL

select MerchantUserId, usex.Nickname, MAX(OrderTransaction.CreatedDate) as LastOrderDate, sd.Url, st.Name as storename
from OrderTransaction
    left join UserExtend usex
    on usex.Id = OrderTransaction.MerchantUserId
    left join StoreDomain sd 
    on sd.StoreId = usex.StoreId
    left join store st
    on st.id = sd.StoreId
where OrderTransaction.Status <> 8
    and sd.IsPrimary = 1    
group by MerchantUserId,usex.Nickname,sd.Url,st.Name
order by LastOrderDate desc

下面是我尝试将所有三个表链接在一起的查询。在将 3 个表格链接在一起方面,我做得对吗?

    var list = _ApplicationDbContext.UserExtend
.GroupJoin(_ApplicationDbContext.OrderTransaction, usex => usex.Id, ord => ord.MerchantUserId, (usex, ord) => new { usex, ord})
.GroupJoin(_ApplicationDbContext.StoreDomain, usexOrd => usexOrd.usex.StoreId, sd => sd.StoreId, (usexOrdStoreDom, sd) => new { usexOrdStoreDom , sd})
.GroupJoin(_ApplicationDbContext.Store, usexOrdStoreDom => usexOrdStoreDom.usexOrdStoreDom.usex.StoreId, st => st.Id, (usexOrdStoreDomStore , st ) => new { usexOrdStoreDomStore, st })

【问题讨论】:

标签: c# mysql entity-framework linq sql-to-linq-conversion


【解决方案1】:

与您的 SQL 查询等效的是以下链接短语。 GroupJoin 用于将一个值与多个值匹配时使用。

更多信息可以参考这个链接:Linq to Entities join vs groupjoin

var list = _ApplicationDbContext.UserExtend.Join(_ApplicationDbContext.OrderTransaction,
      usex => usex.Id,
      ord => ord.MerchantUserId,
      (usex, ord) => new { usex, ord })
      .Join(_ApplicationDbContext.StoreDomain,
      usexOrd => usexOrd.usex.StoreId,
      sd => sd.StoreId,
      (usexOrd, sd) => new { usexOrd, sd })
      .Join(_ApplicationDbContext.Store,
      usexOrdStoreDom => usexOrdStoreDom.sd.StoreId,
      st => st.Id,
      (usexOrdStoreDom, st) => new { usexOrdStoreDom, st })
      .GroupBy(a => new { a.usexOrdStoreDom.usexOrd.ord.MerchantUserId, a.usexOrdStoreDom.usexOrd.usex.Nickname, a.usexOrdStoreDom.sd.Url, a.st.Name, a.usexOrdStoreDom.usexOrd.ord.CreatedDate })
      .OrderBy(a => a.Key.CreatedDate)
      .Select(a => new
      {
         MerchantUserId = a.Key.MerchantUserId,
         Nickname = a.Key.Nickname,
         Url = a.Key.Url,
         storename = a.Key.Name,
         LastOrderDate = a.Max(x => x.usexOrdStoreDom.usexOrd.ord.CreatedDate)
      })
      .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多