任何()没有给出我期望的东西

时间:2014-04-01 18:35:03

标签: c# linq

delMo是DateTime的列表。我已将其填入2014年3月1日和2014年4月1日。 我得到的结果是2条记录(我的预期),但两条记录的p.dt值显示为3/1/2014。我希望1记录为3/1/2014,另一个记录为4/1/2014。

我对以这种方式使用Any()的理解就像在SQL中使用in()语句一样。但是,我得到的结果似乎并没有反映出这一点。我在这里做错了什么想法?

var result = (from p in db.Table1
             where (from dt in delMo
                    where p.dt == dt).Any()
                   &&
                   (from s in db.Stores
                    where p.storeID == s.ID).Any()
             select p).ToList();

[编辑] 我进一步打破了这个问题,结果很奇怪。我将商店ID硬编码为5,它仍然给我带来了问题。我甚至循环遍历delMo并将1值传递给p.dt,并在2014年3月1日的第一遍中得到预期的结果。第二次通过2014年4月1日,它返回3/1/2014 !!如果我在delMo中只有4/1/2014那么它可以工作。这就像它因某种原因保持第一个3/1/2014记录。这毫无意义。

2 个答案:

答案 0 :(得分:1)

Any返回bool,表示集合中的任何元素是否满足给定条件。在没有谓词的情况下使用时,它指示集合是否包含元素。我不确定这是不是你的意思

  

就像在in()语句中使用

一样

但这就是它的作用。 See this link for more details

关于你在评论中的问题,我相信这样的事情应该这样做。我不是linq超过IEnumerable扩展名的忠实粉丝,所以请耐心等待。

var result = db.Table1.Where( p =>
                delMo.Contains( p.dt ) &&
                db.Stores.Where( s=> s.ID == p.storeId ) );

这将返回db.Table1 p.dtdelMo所在p.storeId db.Stores {{1}} {{1}} {{1}} {{1}}的值{{1}}。希望这有帮助!

答案 1 :(得分:0)

这应该有所帮助。我想知道P是否有Stores集合,如果有,那么它更直接,但我没有做出假设。

(from p in db.Table1
  where delMo.Contains(p.dt)
        && db.Stores.Any(x=>x.ID==p.storeID)
  select p).ToList();

注意:日期应完全匹配(包括时间)才能发挥作用。