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# Linq 如何选择数据表中多列的不同行数

C# 查询 SQL Server 表中的 JSON 列以获取匹配的行

LINQ里如何设置查询条件的日期为昨天或者当天????

符合列表中条件的连续元素的子列表 c# linq

如何在 c# 中添加特定条件项后对特定元素进行分组 linq to sql

LINQ查询中的C#多个OR条件[重复]