以人员ID为关键字获取了一本字典。每个值都是一个List,其中包含一个包含日期时间的类。Linq to SQL使用.Contains()替换.Any()
我想从数据库中获取所有合同,其中列表中的每个日期位于-date之间的合同之间。每个人可能有多个。
我不能使用.Any()函数。如果我这样做,我会得到这样的错误:“除了Contains()运算符,本地序列不能用于查询运算符的LINQ to SQL实现。”
这是一个与.nny方法不能用于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的不知道怎么翻译方法的containsKey到SQL,尝试重写dataBaseObjDictionary.ContainsKey(x.PersonRef)为dataBaseObjDictionary.Keys.Contains(x.PersonRef)。 – Oleg
我甚至会更进一步,并尝试使LINQ查询尽可能简单,以免发生错误:'int [] keys = dataBaseObjDictionary.Keys.ToArray(); ... .Where(x => keys.Contains(x.PersonRef)...'我不知道它是否会有所作为,但是我知道在Entity Framework中,我看到它在运行时抱怨类似的东西,所以你必须保持LINQ的简单 –
对我的问题做了一个编辑,问题是我不能使用.Any()方法,它会导致我的错误 – thatsIT