任何()没有给出我所期望的
本文关键字:期望 任何 | 更新日期: 2023-09-27 17:55:50
delMo 是 DateTime 的列表。我用 3/1/2014 和 4/1/2014 填充了它。我得到的结果是 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 日的第一遍中,我得到了预期的结果。第二遍使用 4/1/2014,返回 3/1/2014!!如果我在 delMo 中只有 4/1/2014,那么它可以工作。就像出于某种原因,它保留了第一个 2014 年 3 月 1 日的记录。这毫无意义。
Any
返回一个bool
,指示集合中的任何元素是否满足给定条件。在没有谓词的情况下使用时,它指示集合是否包含元素。我不确定这是否是你说的意思
以这种方式就像在 in() 语句中使用
但这就是它的作用。有关更多详细信息,请参阅此链接。
至于你在评论中的问题,我认为这样的事情应该这样做。我不太喜欢在IEnumerable
扩展中使用linq
,所以请耐心等待。
var result = db.Table1.Where( p =>
delMo.Contains( p.dt ) &&
db.Stores.Where( s=> s.ID == p.storeId ) );
这将返回p.dt
在delMo
中且p.storeId
在db.Stores
中db.Table1
的值。希望这有帮助!
这应该会有所帮助。我想知道P
是否有商店系列,如果有,那么它更直接,但我不做假设。
(from p in db.Table1
where delMo.Contains(p.dt)
&& db.Stores.Any(x=>x.ID==p.storeID)
select p).ToList();
注意:日期应完全匹配(包括时间)才能正常工作。