在 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 中的虚拟(预定义)列上分组

要计算与 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 属性仅从对象获取日期以进行比较。