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 计数错误(列)的主要内容,如果未能解决你的问题,请参考以下文章