Linq to SQL用.Contains()替换.Any()

时间:2015-06-09 15:18:39

标签: c# linq linq-to-sql

获得了一个字典,其中ID为密钥。每个值都是一个List,其中包含一个包含日期时间的类。

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

我不能使用.Any()函数。如果我这样做,我将收到此错误:“除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。”

这是一个使用.iny方法的示例,该方法不适用于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)));
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为应该这样做。看起来你依赖于y和两个y.anys是一样的。此外,您正在检查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)
                       )
                );