C# 通过一个Linq到Sql查询检索多个表

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();

目前,我正在用三个数据库查询填充MVC应用程序中的一个模型

事情是这样的:

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语句会表现得更好?