【问题标题】:Linq Lambda expression for below sql in vb.netvb.net 中以下 sql 的 Linq Lambda 表达式
【发布时间】:2013-11-22 17:27:57
【问题描述】:

我有这个现有的 Sql 语句:

Select Count(ordid),isnull(prcsts,'NOT STARTED')
from lwp
where lwp in( Select max(Id) from lwp group by ordid)
group by prcsts

我想转换为使用 linq-to-sql,但我不知道如何处理子查询中的 group by 表达式。我该怎么做?

我正在使用实体框架,我有一种方法来获取 lwp 列表。我只做了一部分。

Entitydb.lwpmethod
        .GetList
        .Where(Function(F) F.ID = **Max(Function(O)  O.ordid**)
        .GroupBy(Function(F) F.prcsts)
        .Select(Function(F) New With {.A = F.Count, .B = F.Key})
        .ToList

我无法在 max 函数中按子查询编写分组。

【问题讨论】:

  • lwp in (max(id))?你确定它会起作用吗?

标签: vb.net linq lambda subquery linq-group


【解决方案1】:

首先,这不是in,而是=,因为max() 返回单个元素。此外,您的 sql 查询在 where 子句中有 lwp,您可能拼写错误 id。考虑到这一点,您想要的是:

.Where(row=>row.ID=Entitydb.lwpmethod.GetList()
                                     .Where(r=>r.ordid=row.ordid)
                                     .Max(r=>r.ID))

C# 代码,但你明白了。

顺便说一句,这看起来像是在选择最后一行。为什么不直接按id 排序并取第一个元素?

【讨论】:

  • 谢谢它的工作,我对 in 和“=”感到困惑。我认为最好的方法是使用第一个 ID。我会试试的。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多