0

我有这样的事情:

       var myDictionary = new Dictionary<string, string>()
            {
                {"x" ,"y" }
            }; 


        var listIWantToRetriveWithDictKeys = MyDbContext.Documents.ToList().Where(c => myDictionary.ContainsKey(c.SomethingLikeX)).Select(id => id.documentID).ToList();
        var listaIWantToRetriveWithDictValues = Documents.Where(o => myDictionary.ContainsValue(o.somethingLikeY.ToString())).Select(i => i.documentID).ToList();

我知道与列表一起使用的“包含”方法具有类似 ...where(c => myList.Contains(c.Id).... 但我想用字典实现类似的东西。我通常不会使用字典,我对它们知之甚少,但这里的用法似乎很合适。

目前该错误表明密钥为空,并且不允许我检索任何列表。这里的问题在哪里?键不是“x”吗?或者键应该是一个int?

确切的错误:

System.ArgumentNullException: 'Value cannot be null.
Parameter name: key'

在 Documents 之后删除 ToList() 时出错:

System.NotSupportedException:'LINQ to Entities 无法识别方法'Boolean ContainsKey(System.String)'方法,并且此方法无法转换为存储表达式。

有人将此问题标记为“空引用意味着什么”的重复。我知道我的查询中有一个空值,但对我来说,那里有关键。不是“x”吗?

4

1 回答 1

0

尝试检查c.SomethingLikeX != null之前Contains

var myDictionary = new Dictionary<string, string>()
    {
        {"x" ,"y" }
    }; 


var listIWantToRetriveWithDictKeys = MyDbContext.Documents.ToList().Where(c => c.SomethingLikeX != null && myDictionary.Keys.Contains(c.SomethingLikeX)).Select(id => id.documentID).ToList();
var listaIWantToRetriveWithDictValues = Documents.Where(o => c.somethingLikeY != null && myDictionary.Values.Contains(o.somethingLikeY.ToString())).Select(i => i.documentID).ToList();
于 2018-08-27T12:08:46.787 回答