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

本文关键字:期望 任何 | 更新日期: 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.dtdelMo中且p.storeIddb.Storesdb.Table1的值。希望这有帮助!

这应该会有所帮助。我想知道P是否有商店系列,如果有,那么它更直接,但我不做假设。

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

注意:日期应完全匹配(包括时间)才能正常工作。