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记录。这毫无意义。
答案 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.dt
中delMo
所在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();
注意:日期应完全匹配(包括时间)才能发挥作用。