【问题标题】:Cannot convert lambda expression to type int because it is not a delegate type无法将 lambda 表达式转换为 int 类型,因为它不是委托类型
【发布时间】:2017-11-24 09:56:41
【问题描述】:

谁能告诉我以下问题有什么问题,以及如何解决它:

        //filterItem.Value is a string array - It is being conerted into an int array
        var intFilters = Array.ConvertAll(filterItem.Value, s => int.Parse(s));

        //Returns an IQueryable<int> for all items in this context that are also in intFilters
        var ids = Context.table1.Where(a => intFilters.Any(y => y == a.domId)).Select(x => x.domId);

        //query is an IQueryable
        query = query.Where(x => specUnidsNullable.Contains(y => y == x.Id));

上面的目的是只获取来自query的记录,这些记录也包含在ids

我收到以下错误:

Cannot convert lambda expression to type int because it is not a delegate type

我也试过这个:

var ids = idsNullable.Where(x => x > 0);

这很好用 - 我这样做的原因是为了看看问题是否是 ids 无法转换为 lambda 类型表达式。

关于这个错误有很多问题,但似乎没有一个能解决我看到的特定问题......

【问题讨论】:

  • specUnidsNullable.Contains(y =&gt; y == x.Id) 替换为specUnidsNullable.Contains(x.Id)?
  • @Evk 一个简单的错误我应该已经发现了——如果你把它写成答案,我会把它标记为正确

标签: c# linq lambda


【解决方案1】:

specUnidsNullable.Contains(y =&gt; y == x.Id) 调用 LINQ Contains 方法,该方法需要给定类型的单个值(int 我想在这种情况下),并且您在那里传递表达式。所以改为任一

specUnidsNullable.Contains(x.Id);

specUnidsNullable.Any(y => y == x.Id);

【讨论】:

    【解决方案2】:

    我相信在您安装 EntityFramework 并使用 System.Data.Entity.QueryableExtensions 添加后,您的问题将得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多