Linq 计数错误(列)

Posted

技术标签:

【中文标题】Linq 计数错误(列)【英文标题】:Linq Error with Count(column) 【发布时间】:2015-04-27 14:07:27 【问题描述】:

我正在尝试将 SQL 查询写入 Linq,但在获取 Linq 查询中的计数时出现错误。 Sql 中的查询使用 distinct 和 count('coulmn') 离开了外连接。错误发生在 Select new

内的 count 关键字上

SQL 查询:

select MagDesc.MagDescID,  MagDesc.MagTitle, COUNT(*)
from   MagDesc (nolock) 
       left outer join tblDetails (nolock) 
            on MagDesc.MagDescID = tblDetails.MagDescID
where PropertyID is not null
group by MagDesc.MagDescID,  MagDesc.MagTitle

Linq 查询:

    var model = (from mag in _dbContext.MagDesc
                 join dt in _dbContext.tblDetails on mag.MagDescID equals dt.MagDescID into dt
                 where mag.PropertyID != null
                 from subtable in dt.DefaultIfEmpty()
                 select new  mag.MagDescID, mag.MagTitle, dt.Count(m=>m.MagDescID) ).Distinct();

错误消息:“无效的匿名类型成员声明器。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。”

请在这个 linq 查询中帮助我。

更新:添加收到的错误消息

【问题讨论】:

看看编译错误是什么。然后看the documentation。 只需将名称命名为您的对象属性select new Id = mag.MagDescID, Title = mag.MagTitle, Count = dt.Count(m=>m.MagDescID) ) 尝试更改变量名-"在 _dbContext.tblDetails 中将 dt 加入 mag.MagDescID 等于 dt.MagDescID 到 dtxx" 是的,我做到了。仍然是同样的错误。也重新编译了。 【参考方案1】:
   dt.Count(m=>m.MagDescID)

.Count 的那个版本采用一个应该返回布尔值的函数。 我猜 MagDescID 不是布尔值...

也许您的意思是计算 ID 的数量:

   dt.Select(m => m.MagDescID)
     .Count()

您还需要为属性命名(如另一个答案中所述):

  select new 
   
      mag.MagDescID, 
      mag.MagTitle, 
      magCount = dt.Select(m => m.MagDescID).Count()
   

【讨论】:

是的,我正在尝试获取 id 的计数。但我没有在 dt.Select(m => m.MagDescID) 附近得到 .Distinct()。选择新的 mag.MagDescID, mag.MagTitle, dt.Count(m=>m.MagDescID)).Distinct().Count();

以上是关于Linq 计数错误(列)的主要内容,如果未能解决你的问题,请参考以下文章

计数错误但我在LINQ表达式中没有使用Count,

Linq 连接表并创建动态列错误

LINQ 根据计数 >1 的另一列获取列

Linq 得到条件计数

如何使用 Linq 获取列中每个不同值的计数

错误列计数不计算第 1 行的计数 [重复]