【问题标题】:Linq select objects in Database exists Dictionary Keys数据库中的 Linq 选择对象存在字典键
【发布时间】:2017-08-04 03:06:53
【问题描述】:

我想使用 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 无法识别 method 'Boolean ContainsKey(Int32)' 方法,并且该方法不能 翻译成商店表达式。'

【问题讨论】:

  • 尝试添加AsEnumerablearticle.AsEnumerable().Where(a =&gt; dict.ContainsKey(a.ArticleId));
  • Tetsuya Yamamoto 它给了我一个错误的结果。
  • 那你有什么不正确的结果?您想使用Console.WriteLine 显示什么值?
  • 我想要获取 Article 对象,但它只给了我一行。
  • 只需使用ToList:article.ToList().Where(a =&gt; dict.Contains(a.ArticleId));。不需要在那里使用ContainsKey

标签: c# sql-server entity-framework linq dictionary


【解决方案1】:

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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 2012-11-07
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多