我正在使用LINQ从我的EF上下文以及Asp .Net Identity 2.0(都位于同一MS SQL Server数据库中)检索数据。

我的问题是LINQ将它们视为两种不同的数据上下文情况,并且无法处理查询。

"The specified LINQ expression contains references to queries that are associated with different contexts."


我想要实现的是从EF表中简单返回10个顶级项(我在代码摘录中跳过了这些项),该表以前是按ASP .NET Identity表中的UserName排序的。

我已经在StackOverflow上看到过一些此问题的案例,但是我无法在我的案例中应用任何解决方案。

当然,首选解决方案是不下载所有表数据并在服务器上进行排序。

有疑问的查询:

var dbDataSorted = from entry in dbData
        join user in this.UserManager.Users
        on entry.UserId equals new Guid(user.Id)
        orderby user.UserName ascending
        select entry;
return dbDataSorted;

最佳答案

LINQ和EF非常酷。但是有时候,它的抽象无法满足您的需求。

只是退一步,手动编写查询,将其放入字符串中,使用SqlQuery方法针对yourcontext.YourDbSet运行它,然后完成它。

var query = @"SELECT * FROM dbData as entry
              INNER JOIN Users
              ON entry.UserId = Users.Id
              ORDER BY Users.Username";

yourcontext.dbData.SqlQuery(query);


如果提供给您的抽象不能满足您的需求,则滥用抽象做奇怪的事情远不及使用较低级别的界面来得清楚。

10-07 13:52
查看更多