我从LINQ查询接收到标题中显示的错误,该查询包括来自两个不同edmx文件的两个表。这是查询:
var query = (from a in db1.Table1 join b in db1.Table2 on a.Id equals b.Id orderby a.Status where b.Id == 1 && a.Status == "new" select new { Id = a.Id, CompanyId = (from c in db2.Company where s.Id == a.Id select new { c.CompanyId }) });
db1并且db2是与两个不同的edmx文件关联的上下文。我该如何克服这个错误?
db1
db2
您将必须执行两个数据库查询:
var IDs = (from a in db1.Table1 join b in db1.Table2 on a.Id equals b.Id orderby a.Status where b.Id == 1 && a.Status == "new" select new a.Id).ToArray(); var query = from c in db2.Company join a in IDs on c.Id equals a.Id select new { Id = a.Id, CompanyId = c.CompanyId };
将.ToArray()是至关重要的。它可以防止EF尝试执行组合查询(由于它使用两个不同的上下文,因此将失败)。.AsEnumerable()如果您希望保持延迟加载,可以使用。
.ToArray()
.AsEnumerable()
还有您的后续问题:
还有其他方法可以使LINQ查询更优化吗?也就是说,要在单个LINQ查询本身中执行操作?
为了使原始查询成功运行,它必须仅使用单个数据上下文,这意味着所有数据必须可从单个EDMX获取,而这又意味着单个连接字符串。有几种方法可以实现: