【问题标题】:Sql IN Clause equivalent in LinqLinq 中的 Sql IN 子句等效
【发布时间】:2015-02-12 05:54:59
【问题描述】:

我想在 linq 的 cluase 中使用 sql,因为我尝试过 contains,但它显示错误。我的代码是..

 var allId = new int[] { 31, 32, 33 };
 var libraryList = from c in db.COURSELIBRARies
                   join cc in db.COURSECATEGORYTAGGINGs on c.LIBITEMID equals cc.COURSEID
                   where allId.Contains(cc.CATEGORYID) // here error is showing.
                   select new Library { Id = c.LIBITEMID, Name = c.GROUPNAME, Desc = c.DESCRIPTION, logo = c.LOGO, CategoryId = cc.CATEGORYID };

错误是:

'int[]' 不包含 'Contains' 的定义,并且最佳扩展方法重载 'System.Linq.Queryable.Contains<TSource>(System.Linq.IQueryable<TSource>, TSource)' 有一些无效参数

实例参数:无法从'int[]' 转换为'System.Linq.IQueryable<int?>'

【问题讨论】:

  • 尝试将数组allId改为List
  • 该特定错误是由于两件事之一。要么你在撒谎,实际上并没有使用Entity Framework,而是使用Linq to SQL,或者你正在使用Entity Framework 2,它不支持IEnumerable.Contains
  • 您的前 3 行代码不起作用。将{31,32,33}.Split(',') 拆分并将元素解析为int 失败,因为"{31" != int
  • @JensKloster 我写错了,实际上它的值是动态的,即 31,32,33,所以它可以工作。

标签: c# linq entity-framework compiler-errors linq-to-entities


【解决方案1】:

你加入了吗?

using System.Linq;

?

另一个可能的原因是您传递给 Contains() 的值不是 INT。尝试投射它:where allId.Contains((int)cc.CATEGORYID)

【讨论】:

  • cc.CATEGORYID 的数据类型是什么?也许尝试将其转换为int?其中 allId.Contains((int)cc.CATEGORYID)
  • cc.CATEGORYID的类型是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2010-10-25
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多