在数据库中选择存在于字典键中的对象的Linq查询

4

我希望使用Linq一次性通过多个主键从数据库中查询数据。然而,我的主键存储在Dictionary<int, string>中。

我的字典

private Dictionary<int,string> dict = new Dictionary<int, string>
{
    {1, "Value 1"},
    {2, "Value 2"},
    {3, "Value 3"},
    {4, "Value 4"},
    {5, "Value 5"},
    {6, "Value 6"}

 };

在原生SQL中

SELECT * FROM Article WHERE ArticleId IN (1,2,3,4,5,6);

我在 Linq 中尝试过

var article = new NewsEntities().Articles;
var mainArticles = article.Where(a => dict.ContainsKey(a.ArticleId));

foreach (var mainArticle in mainArticles)
{
    Console.WriteLine(mainArticle.ArticleId);
}

我遇到的错误

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


尝试添加 AsEnumerablearticle.AsEnumerable().Where(a => dict.ContainsKey(a.ArticleId)); - Tetsuya Yamamoto
Tetsuya Yamamoto,它给我返回了一个错误的结果。 - Seanghay
你得到了什么错误的结果?你想使用Console.WriteLine显示什么值? - Tetsuya Yamamoto
我想获取文章对象,但它只给了我一行。 - Seanghay
只需使用 ToListarticle.ToList().Where(a => dict.Contains(a.ArticleId));。不需要在那里使用 ContainsKey - Tetsuya Yamamoto
Eric的方法非常有效。 - Seanghay
1个回答

4

Linq to Entities不支持字典方法,请使用List代替。

var article = new NewsEntities().Articles;
var list = new List<int>(dict.Keys);
var mainArticles = article.Where(a => list.Contains(a.ArticleId));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接