C# 通过一个Linq到Sql查询检索多个表
目前,我正在用三个数据库查询填充MVC应用程序中的一个模型 事情是这样的:C# 通过一个Linq到Sql查询检索多个表,c#,linq-to-sql,C#,Linq To Sql,目前,我正在用三个数据库查询填充MVC应用程序中的一个模型 事情是这样的: IndexViewModel model = new IndexViewModel(); model.Links = Repository.GetAll().ToArray(); model.SourceOne = StaffMembersRepository.GetAll().ToArray(); model.SourceTwo = CategoriesRepository.GetAll().ToArray();
IndexViewModel model = new IndexViewModel();
model.Links = Repository.GetAll().ToArray();
model.SourceOne = StaffMembersRepository.GetAll().ToArray();
model.SourceTwo = CategoriesRepository.GetAll().ToArray();
return model;
我只希望进行一个查询(为了获得更好的性能),它将返回三个表的所有行。
我不能进行内部联接,因为这三个表根本没有(假设它们没有)连接
我已经试过了
var result = from link in Repository.GetAll()
from staffMember in StaffMembersRepository.GetAll()
from category in CategoriesRepository.GetAll()
select new { link, staffMember, category };
但在突出显示“CategoriesRepository.GetAll()
”代码段时出现编译错误,代码如下:
源类型为“System.Linq.IQueryable”的查询表达式中的后续from子句中不允许使用类型为“System.Linq.IQueryable”的表达式。调用“SelectMany”时类型推断失败
无论这意味着什么。使用DataLoadOptions类的LoadWith方法生成一个查询,在该查询中加载所有相关数据(如果可以通过外键关系进行链接),请阅读更多 如果不存在此类关系,则可以使用DataContext实现连接查询:
请在此处阅读更多信息:我认为不可能通过LINQ一次检索到完全不相关的表。也许出于性能原因,你应该考虑缓存,这样你就不必每次查询数据库了。 通过MSSQL上的纯SQL,您可以使用批处理语句
var batchSql = "select * from Repository; select * from StaffMembersRepository; select * from CategoriesRepository";
// ...
// iterate over batch results
using(var reader = command.ExecuteReader())
{
var currentResultSet = 0;
while(reader.NextResult())
{
currentResultSet++;
switch(currentResultSet)
{
case 1:
while(reader.Read())
{
// retrieve row data
}
case 2:
// similar
case 3:
// similar
}
}
}
但我认为这不是一个好方法。在SQL中,仅使用一个查询(好的,除了union查询,但这是一个特例)不可能从三个表中检索数据。是什么让您认为在后台生成SQL的LINQ可以做到这一点?是什么让你认为一个LINQ语句会表现得更好?