Linq to SQL replace .Any() with .Contains()

本文关键字:Contains with Any to SQL replace Linq | 更新日期: 2023-09-27 17:54:46

获取一个以person Id为键的字典。每个值都是一个List,该类包含一个日期时间。

我想从数据库中获得所有合同,其中列表中的每个日期都在合同之间,从和直到日期。每个人可以有多个。

我不能使用。any()函数。如果我这样做,我会得到这个错误:"局部序列不能在LINQ到SQL查询操作符的实现中使用,除了Contains()操作符。"

这是一个。any方法不能与linq to sql一起工作的例子。我需要另一种方法来管理它。

public class SimpleObject
    {
        public bool Test { get; set; }
        public DateTime DateTime { get; set; }
    }
    private void Test(Dictionary<int, List<SimpleObject>> dataBaseObjDictionary)
    {
        using (var db = TpContext.Create())
        {
            var selectedObj = db.Contracts.Where(x => dataBaseObjDictionary.ContainsKey(x.PersonRef) && dataBaseObjDictionary.Values.Any(y => y.Any(a => x.FromDate <= a.DateTime) && y.Any(a=>a.DateTime >= x.UntilDate)));
        }
    }

Linq to SQL replace .Any() with .Contains()

我想这个应该可以了。看起来你指望y等于两个y。此外,您正在检查a是否大于until date和大于from date,所以我修复了这些。

var selectedObj = db.Contracts.Where(x => dataBaseObjDictionary.ContainsKey(x.PersonRef) 
                && dataBaseObjDictionary.Values.Any(
                y => y.Any(a => x.FromDate <= a.DateTime 
                        && a.DateTime <=  x.UntilDate)
                       )
                );