使用IDataContext加入Linq 2 SQL

时间:2015-06-28 18:41:51

标签: linq entity-framework

我的dbContext类接口如下

public interface IDataContext : IDisposable, IUnitOfWork
  {
    IQueryable<T> Query<T>() where T : class ;
    .... Other methods
  }

我的实现就像这样

public IQueryable<T> Query<T>() where T : class
    {
      return Set<T>();
    }

现在我这样查询

     var menus = (from s in _dbContext.Query<SiteMenu>()
               from r in _dbContext.Query<RoleMenu>()
               where r.Role.Name == rolename
               select s).ToList();

我收到以下错误

  

LINQ to Entities无法识别方法'System.Linq.IQueryable`1 [G.Domain.Models.Models.RoleMenu]查询[RoleMenu]()'方法,而且此方法无法转换为商店表达式。

我要明确加入这项工作,你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

即使你有一个完美的LINQ查询,如下所示:

var menus = (from s in _dbContext.Query<SiteMenu>()
               from r in _dbContext.Query<RoleMenu>()
               where r.Role.Name == rolename
               select s).ToList();

如果Query方法在其中调用了一些自定义方法,它将嵌入到试图将此LINQ查询转换为SQL的逻辑中,并尝试将任何方法调用转换为适当的SQL方法。 LINQ中的方法支持有限,因此它发现它无法转换为SQL的方法“QueryRoleMenu”,并抛出此异常。