【问题标题】:LINQ statement unable to create a constant value of typeLINQ 语句无法创建类型的常量值
【发布时间】:2013-11-06 02:53:44
【问题描述】:

好的,我在 LinqPad 中测试过的这个 LINQ 语句有一个错误,它工作正常。错误是:

无法创建“HostelApp.Models.bookingLines”类型的常量值。此上下文仅支持原始类型或枚举类型。

代码在这里:

var availableFBunks = from b in this.bunks
      where b.gender == "F" && 
           !this.bookingLines.Any(
                l => (l.bunkID == b.bunkID) && (l.date == DateTime.Today.AddDays(i)))
      select b;

SQL 语句:

-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'F'
DECLARE @p1 DateTime = '2013-11-07 12:00:00 AM'
-- EndRegion

SELECT b.bunkDesc AS Bunk_Name
FROM bunks AS b
WHERE (gender = @p0) AND NOT EXISTS
    (SELECT *
     FROM bookingLines AS l
     WHERE l.bunkID = b.bunkID and (l.date = @p1))

【问题讨论】:

  • 能否请包含类定义,也可以试试这个bunks.Where(b => b.varname <conditions>),如果你能解释一下这个 LINQ 语句的用途,那就太好了。
  • bunks.Where(b => b.gender == "F" && (!this.bookingLines.Any(l => l.bunkID == b.bunkID && l.date == DateTime.Today.AddDays(i)))
  • 就 linq 语法而言,您的 linq 语句看起来不错,但在如何使用 linq 通过 Entity Framework 查询数据源方面存在一些限制。
  • 我从床上跳下来,因为它困扰着我!凌晨四点!大声笑,马修谢谢我早上会回复更多,但我试着按照你说的做,但它不允许我这样做。 Geezer498,这让我很烦恼,就像我说我已经在 LinqPad 中测试过它并且它工作正常!
  • 尝试拉出DateTime.Today.AddDays(i) 部分并将其放入查询上方的变量中...由于这是一个非确定性语句,也许它可能与该转换有关... ?

标签: c# asp.net linq asp.net-mvc-4


【解决方案1】:

您可以使用 let 关键字在 LINQ 中执行 IN/NOT IN 查询

var availableBunks = from bunk in bunks
        let bl = from bookingLine in bookingLines
            where bookingLine.Date == DateTime.Today.AddDays(d)
            select bookingLine.BunkId
        where bunk.Gender == "F" && !bl.Contains(bunk.BunkId)
        select bunk;

let clause (C# Reference)

【讨论】:

  • 感谢@Jonathan,再次通过 LinqPad,它正在接受(在对其进行小的变量更改以接受它之后),但是一旦将其放入应用程序中,我就会得到与以前完全相同的错误: (
  • 我有一个 Uni 的专业人士正在查看它,因为他们看不出它有什么问题,你给我的代码她说应该可以工作!!我会尽快发布。
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多