【问题标题】:EF5 + Using the 'LIKE' operator inside a Lambda ExpressionEF5 + 在 Lambda 表达式中使用“LIKE”运算符
【发布时间】:2013-01-16 17:22:48
【问题描述】:

在我的实体(销售)中有一个类型为DateTimeDate

我使用以下 lambda 表达式从该表中获取最新的 TrNo。但它总是给我Null。因为它还比较了列的Time 部分。其实我是想比较一下专​​栏的Date部分。

db.Sales.OrderByDescending(O => O.Date).Where(O => O.Date == DateTime.Now ).Select(O => O.TrNo).FirstOrDefault();

请帮助我构建正确的代码。 (我的数据库是 MySQL)

谢谢!

【问题讨论】:

    标签: c# entity-framework ef-code-first lambda


    【解决方案1】:

    如果O.Date 是日期,只需将其与DateTime.Now.Date 进行比较,因为DateTime.Now 将返回日期和时间。如果O.Date 实际上是DateTime,只需执行相同的操作,O.Date.Date == DateTime.Now.Date

    【讨论】:

    • 我不确定EF能不能把这个表达式转换成sql代码。
    • 谢谢,但它会抛出,The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
    • 是的。看起来你是对的。我建议 OP 看看这个。 stackoverflow.com/questions/1478215/…
    • 只需将您的 DateTime 值移动到单独的变量中,然后在 LINQ 查询中使用它
    【解决方案2】:

    如果您只想测试日期时间的日期部分,请尝试此操作。

    db.Sales.OrderByDescending(O => O.Date).Where(O => O.Date == DateTime.Now.Date ).Select(O => O.TrNo).FirstOrDefault();
    

    【讨论】:

    • DateTime.Now.Date 是时间为 00:00.000 的 DateTime,因此您的查询将返回 null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2022-01-21
    • 2016-06-14
    • 2020-07-14
    相关资源
    最近更新 更多