【问题标题】:LINQ Query returns nothingLINQ 查询不返回任何内容
【发布时间】:2010-04-22 19:36:23
【问题描述】:

为什么这个查询返回 0 行?

有一条记录与参数匹配。

SomeDataContext db = new SomeDataContext(ConnString);

return db.Deafkaw.Where(p => 
      (p.SomeDate1 >= aDate && 
         p.SomeDate1 <= DateTime.Now) &&
      (p.Year == aYear && p.IsSomething == false)
  ).ToList();

我错过了什么吗?

在桌子上聋子

SomeDate1 = 20/4/2010 11:32:17 年份 = 2010 IsSomething = 假

...除了我对条件不感兴趣的其他列。

在我给出 IsSomething = False 和 Year = 2010 的日期之间我需要 SomeDate1。

【问题讨论】:

  • Deafkaw 是什么,etos 的值是什么,aDate 的值是什么,对象、行等中的确切数据是什么?
  • 我的猜测是确实没有记录与您的 where 表达式真正匹配。
  • 我们能看到您认为匹配的数据吗?否则我们必须将其归结为“选择已损坏”...
  • 已编辑,也许你现在更清楚这是什么
  • @gtas:嗯,不是真的。关于 Deafkaw 数据集的内容仍然没有任何线索,它的内容对于确定您的 where 条件有什么问题非常关键。

标签: linq-to-sql c#-3.0


【解决方案1】:

您没有将结果分配给任何东西,因此它被丢弃了。试试这个:

var results = db.Deafkaw.Where(p => 
         (p.ImerominiaKataxorisis >= aDate && 
          p.ImerominiaKataxorisis <= DateTime.Now) &&
         (p.Year == etos && p.IsYpodeigma == false)
     ).ToList();

更新:您更改了问题,所以现在我不确定这是正确的答案。你能把调用这个方法的代码贴出来吗?

【讨论】:

  • 哦,我只是假设他只是没有在他的消息中包含作业。
  • 基本上 .ToList() 在方法中返回。
  • @gtas:我和你一样惊讶。但很高兴你已经解决了你的问题。
【解决方案2】:

如果没有任何附加信息,很难回答您的问题。检查以下几点可能会帮助您找到问题:

  • 如果你去掉Where子句并写Deafkaw.ToList(),你会得到什么?
  • aDateetos 的值是多少?
  • 你能仔细检查一下情况吗?您是否要求所有子条件同时成立?如果打印整个DeaFkaw 数据结构,会有这样的数据吗?
  • 您能否尝试删除一些子条件,看看是否会产生一些结果?

【讨论】:

  • 如果我使用 Deafkaw.ToList() 我可以正确地从表中获取数据,我需要同时保持所有这些条件,因为你的意思是 al 都是真的......在某种意义上,删除子条件,仍然不返回我需要的东西。奇怪的是不是
  • 那么,你是说如果你写例如Deafkaw.Where(p =&gt; p.ImerominiaKataxorisis &lt;= DateTime.Now).ToList(),你仍然得到0个结果吗?所有子条件都是这样吗(例如IsYpodeigma == false?),当你写Deafkaw.Where(p =&gt; true).ToList()时会发生什么?这会返回一些结果吗?
  • 我不知道为什么,但我必须引入一个变量并返回这个变量才能工作!!!其他类似的方法直接在 return 语句中起作用。
  • 这听起来很奇怪。您可以编辑您的问题并显示差异吗?也许有人可以解释这种行为:-)
【解决方案3】:

试试

Deafkaw.Where(p => (p.ImerominiaKataxorisis >= aDate && p.ImerominiaKataxorisis <= DateTime.Now &&
            p.Year == etos && p.IsYpodeigma == false)).ToList();

【讨论】:

  • 这有什么关系?删除这些括号不会影响逻辑,它们都是 &&
  • 是的,我的错。出于某种原因,我误读了运算符优先级,并在我的脑海中出现了这个(p =>(a && b))&&(c && d)。但是 && beats => :)
【解决方案4】:

使用 SQL 分析器。查看生成的 sql 查询。手动运行 sql 查询,看看是否能取回任何记录。

【讨论】:

  • 您也可以只设置数据上下文的Log 属性:例如,db.Log = Console.Out; 会将查询和绑定参数输出到控制台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
相关资源
最近更新 更多