转换IQueryable <object>时出现NotSupportedException

时间:2016-06-30 12:10:37

标签: c# linq exception iqueryable

当我这样做时:

    var db = new NotentoolEntities();
    IQueryable<GroupOfBranches> queryGOB = db.tabGroupOfBranches.Cast<GroupOfBranches>().Where(x => x.intGroupID.Equals(ID));
    List<GroupOfBranches> GOB = new List<GroupOfBranches>(queryGOB); //here is the error

我收到了以下错误:

A first chance exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll

2 个答案:

答案 0 :(得分:4)

我认为底层LINQ提供程序无法将对Equals的调用转换为它知道的任何内容。

使用==运算符代替。这将最终出现在另一个可以翻译的表达式树中。

var db = new NotentoolEntities();
IQueryable<GroupOfBranches> queryGOB =
    db.tabGroupOfBranches.Cast<GroupOfBranches>().Where(x => x.intGroupID == ID));
List<GroupOfBranches> GOB = new List<GroupOfBranches>(queryGOB);

如果GroupOfBranches是tabGroupOfBranches返回的类型的派生类,那么你应该使用OfType而不是Cast。

否则,Cast可能会追踪Where,并被Select替换为显式创建GroupOfBranches类实例的Select。

答案 1 :(得分:0)

可能会考虑将您的代码更改为

using (var db = new NotentoolEntities())
   {
      var GOB = db.tabGroupOfBranches.Where(x => x.intGroupID == ID).Select(y => new GroupOfBranches
          {
              /// here specify your fields
          }).AsNoTracking().ToList();
    }