C# Linq到SQL将.Any()替换为.Contains()
我有一本以人名为关键字的字典。每个值都是一个包含datetime的类的列表 我想从数据库中获取所有合同,其中列表中的每个日期都介于从-日期到-日期之间。每个人可能有多个 我不能使用.Any()函数。如果我这样做,我会得到这个错误:“除了Contains()操作符之外,不能在查询操作符的LINQ到SQL实现中使用局部序列。” 这是一个使用.Any方法的示例,该方法不适用于linq to sql。我需要另一种方法来处理这个问题C# Linq到SQL将.Any()替换为.Contains(),c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一本以人名为关键字的字典。每个值都是一个包含datetime的类的列表 我想从数据库中获取所有合同,其中列表中的每个日期都介于从-日期到-日期之间。每个人可能有多个 我不能使用.Any()函数。如果我这样做,我会得到这个错误:“除了Contains()操作符之外,不能在查询操作符的LINQ到SQL实现中使用局部序列。” 这是一个使用.Any方法的示例,该方法不适用于linq to sql。我需要另一种方法来处理这个问题 public class SimpleObject {
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)));
}
}
公共类SimpleObject
{
公共布尔测试{get;set;}
公共日期时间日期时间{get;set;}
}
专用无效测试(字典数据库ObjDictionary)
{
使用(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>=x.UntilDate));
}
}
我认为应该这样做。看起来你依赖的是y,这两个y都是一样的。此外,您正在检查a是否大于截止日期和大于起始日期,因此我修复了这些
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)
)
);
var selectedObj=db.Contracts.Where(x=>dataBaseObjDictionary.ContainsKey(x.PersonRef)
&&dataBaseObjDictionary.Values.Any(
y=>y.Any(a=>x.FromDate我认为应该这样做。看起来您依赖于y与两个y.Any相同。此外,您正在检查a是否大于截止日期和起始日期,因此我修复了它们
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)
)
);
var selectedObj=db.Contracts.Where(x=>dataBaseObjDictionary.ContainsKey(x.PersonRef)
&&dataBaseObjDictionary.Values.Any(
y=>y.Any(a=>x.FromDate)我认为linq到sql不知道如何将方法ContainsKey转换为sql,尝试将dataBaseObjDictionary.ContainsKey(x.PersonRef)重写为dataBaseObjDictionary.Keys.Contains(x.PersonRef)。我甚至会更进一步,尝试使LINQ查询尽可能简单,以减少出错:int[]keys=dataBaseObjDictionary.keys.ToArray();…其中(x=>keys.Contains(x.PersonRef)…
。我不知道这是否会有所不同,但我知道使用Entity Framework时,我看到它在运行时抱怨类似的事情,因此您必须保持LINQ的简单。对我的问题进行了编辑。问题是我不能使用.Any()方法。它给我带来了一个错误。我认为linq to sql不知道如何将方法ContainsKey转换为sql,请尝试将dataBaseObjDictionary.ContainsKey(x.PersonRef)重写为dataBaseObjDictionary.Keys.Contains(x.PersonRef)。我甚至会更进一步,尝试使LINQ查询尽可能简单,以减少出错:int[]keys=dataBaseObjDictionary.keys.ToArray();…其中(x=>keys.Contains(x.PersonRef)…
。我不知道这是否会有所不同,但我知道使用Entity Framework时,我看到它在运行时抱怨类似的事情,因此您必须保持LINQ的简单。对我的问题进行了编辑。问题是我不能使用.Any()方法。它给我带来了一个错误。我认为linq to sql不知道如何将方法ContainsKey转换为sql,请尝试将dataBaseObjDictionary.ContainsKey(x.PersonRef)重写为dataBaseObjDictionary.Keys.Contains(x.PersonRef)。我甚至会更进一步,尝试使LINQ查询尽可能简单,以减少出错:int[]keys=dataBaseObjDictionary.keys.ToArray();…其中(x=>keys.Contains(x.PersonRef)…
。我不知道这是否会有所不同,但我知道使用Entity Framework时,我看到它在运行时抱怨类似的事情,因此您必须保持LINQ的简单。对我的问题进行了编辑。问题是我不能使用.Any()方法。它给我带来了一个错误。但是我不能在对DB进行操作时使用任何函数。我得到了这个错误:“在查询运算符的LINQ到SQL实现中不能使用本地序列,除了Contains()运算符。”您可以使用.Count>0吗?而且该错误没有明确地将.Any命名为问题所在。很可能是ContainsKey。也尝试过,但不幸的是没有!相同的错误。我需要使用contains。我将使用更大的查询来生成另一个解决方案,而不是按日期筛选。但是,我无法使用。在对DB进行操作时使用任何函数。我收到此错误或者:“除了Contains()运算符外,查询运算符的LINQ到SQL实现中不能使用局部序列。”您可以使用.Count>0吗?而且该错误没有明确地将.Any命名为问题所在。很可能是ContainsKey。也尝试过,但不幸的是没有!相同的错误。我需要使用contains。我将使用更大的查询来生成另一个解决方案,而不是按日期筛选。但是,我无法使用。在对DB进行操作时使用任何函数。我收到此错误或者:“除了Contains()运算符外,查询运算符的LINQ到SQL实现中不能使用局部序列。”可以使用.Count>0吗?而且该错误没有显式地将.Any命名为问题所在。很可能是ContainsKey。也尝试了该操作,但不幸的是没有!相同的错误。我需要使用contains。我将使用更大的查询来生成另一个解决方案,而不是按日期筛选。