c# Linq 方法不符合我设置的条件之一
Posted
技术标签:
【中文标题】c# Linq 方法不符合我设置的条件之一【英文标题】:c# Linq method is not following one of my conditions that I set 【发布时间】:2020-09-23 11:43:01 【问题描述】:我正在尝试创建一个如下所示的列表。
由于某种原因,它遵循前两个条件,isPublished 和 IsRPG == false。但它忽略了 ShelfDate。
我想要所有 ShelfDate 大于或等于当前日期的游戏。
但它会显示具有任何 ShelfDate 的游戏...
BTW ShelfDate 是 DateTime 类型。
这是我的代码:
var games = await _context.Game
.Where(x => x.IsPublished == isPublished && x.IsRPG == false && x.ShelfDate >= DateTime.Now)
.Select(x => new GameEntity
...
以下是 Game 和 GameEntity 的模型:
public partial class Game
public long Id get; set;
public string Title get; set;
public DateTime ShelfDate get; set;
public DateTime IsPublished get; set;
public bool IsRPG get; set;
public string Description get; set;
public partial class GameEntity
public string Title get; set;
public DateTime ShelfDate get; set;
public DateTime IsPublished get; set;
public bool IsRPG get; set;
我做错了吗?
我没有收到任何错误。
谢谢!
【问题讨论】:
=>
应该是 <=
或 >=
@juunas 抱歉,这是我在输入代码时的拼写错误。谢谢!
可能DateTime.Now
没有被您的数据提供者识别,需要提前设置而不被查询评估?
DateTime.Now
生成本地时区的日期时间。数据库是否将日期存储为 UTC 或其他时区? DateTime.UtcNow
将在 UTC 时区创建时间。
@JeremyF。就是这样!在运行 Linq 查询之前,我将本地 DateTime 变量设置为 DateTime.Now.Date。有用!谢谢!
【参考方案1】:
将响应放在这里。
DateTime.Now
无法被您的数据提供者识别,因此需要提前设置且不被查询评估,假设您使用的是实体框架。
【讨论】:
【参考方案2】:您在这里使用了错误的语法。您正在使用 lambda 运算符 =>
。你必须在这里使用比较。 >=
或 <=
应该是这样的。
var games = await _context.Game
.Where(x => x.IsPublished == isPublished && x.IsRPG == false && x.ShelfDate <= DateTime.Now)
.Select(x => new GameEntity
...
【讨论】:
以上是关于c# Linq 方法不符合我设置的条件之一的主要内容,如果未能解决你的问题,请参考以下文章
C# 查询 SQL Server 表中的 JSON 列以获取匹配的行