我正在努力将我的项目从 MySQL 转换为 MongoDB。 我正在使用 LinQ 将一些语句转换为 MongoDB。
这是我的原始声明:
SELECT COUNT(machinelograwdata.Parameter1) AS 'HideSheetCounter',
machinelograwdata.Parameter42 AS 'Orders',
machinelograwdata.MachineID
FROM machinelograwdata
WHERE EventID = '14'
AND CONVERT( Parameter35 , DECIMAL) <> 0
AND machinelograwdata.StartTime <= ' strSearchingEndDate + '
AND machinelograwdata.StartTime >= ' strSearchingStartDate + '
GROUP BY Parameter42 , machinelograwdata.MachineID
我尝试了以下 LinQ 语法,但出现错误:
var Temp3 = from c in MachineCollection.AsQueryable()
where c.StartTime >= DateTime.Parse(strSearchingStartDate)
&& c.StartTime <= DateTime.Parse(strSearchingEndDate)
&& c.EventID == "14"
&& c.Parameter35 != "0"
group c by new { c.Parameter42, c.MachineID } into grps
select new
{
MachineID = grps.Key.MachineID,
Orders = grps.Key.Parameter42,
HideSheetCounter = grps.Count(x => x.Parameter1)
};
Visual Studio 在 select
和 x.Parameter1
处引发问题
对于x.Parameter1
,错误是无法将类型“string”隐式转换为“bool”
但我的 POCO 是
[BsonElement("Parameter1")]
public string Parameter1
{
get;
set;
}
我的代码有什么问题吗?你能给我一些提示吗? 谢谢
最佳答案
Count()
method需要一个谓词,该谓词为您想要计算的满足该条件的每个元素返回一个 bool 值。
要模仿 COUNT(columnName)
的相同行为,您需要为该方法提供一个排除字段的 null
值的谓词:
grps.Count(x => x.Parameter1 != null)
关于c# - 从 C# MongoDB 中的 SQL 语句转换 LinQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617988/