在 linq 中的虚拟(预定义)列上分组
本文关键字:预定义 linq 虚拟 | 更新日期: 2023-09-27 17:55:34
我正在尝试为我的一个仪表板编写一个 linq 查询,该查询根据某些条件检索数据。我想根据表中可用的不同状态显示记录计数。
以下是我尝试转换为 Linq 的 SQL 查询。
select count(id) cnt, 'Available' label from table where date = sysdate
上面的查询在数据库 IDE 中返回以下结果。这是我想要的linq结果
cnt label
0 Available
我尝试使用以下 linq 查询,但它返回 0 计数,因此未检索结果。
var data = (from a in context
where a.date = System.DateTime.Now
group a in a.id into g
select new {
cnt = g.Count(),
label = 'Available'
}).ToList();
如何在 linq 中实现上述结果。您的帮助将不胜感激。
谢谢
-------------编辑----------------更新了 LINQ 查询
var data = (from a in context.TableA
where a.id = uniqueID
group a in a.id into g
select new {
cnt = g.Count(),
label = 'Available'
}).Concat(from a in context.TableB
where a.id = uniqueID
group a in a.id into g
select new {
cnt = g.Count(),
label = 'WIP'
}).ToList();
要计算与 linq 查询中的谓词匹配的元素数,只需使用 where
子句:
var results =
from a in context
where a.date.Date == DateTime.Now.Date
&& a.id == someIdHere
select a;
var data = new {
count = results.Count(),
label = "Available"
};
或者,在扩展方法语法中(我更喜欢):
var results = context.Where(a => a.date.Date == DateTime.Now.Date && a.id == someIdHere);
var data = new {
count = results.Count(),
label = "Available"
};
在比较DateTime
对象时也要小心您想要的结果;将DateTime.Now
与日期进行比较会返回 false,因为它也会比较时间码,因此使用 DateTime.Date
属性仅从对象获取日期以进行比较。