c# - Linq 语句需要优化

标签 c# linq linq-to-sql lambda

我写了下面的代码:

//get the user from the DB
var tmpuser = _db.aspnet_Users.First(q => q.UserName == user.Identity.Name);

//list the direct connections to Verbond
List<Verbond> verb1 = tmpuser.UsersVerbondens
                             .Where(q => q.Schooljaar.Sch_Schooljaar == schooljaarparam)
                             .Select(q => q.Verbond)
                             .ToList();

//list the connected Facturatieverbonden
List<FacturatieVerbonden> verb2 = tmpuser.UsersFacturatieVerbondens
                                         .Where(q => q.Schooljaar.Sch_Schooljaar == schooljaarparam)
                                         .Select(q => q.FacturatieVerbonden)
                                         .ToList();

//loop through the facturatieverbonden and add their verbonds to the first list
foreach (FacturatieVerbonden v in verb2) {
    verb1.AddRange(v.Verbonds);
}

//make a distinct list
List<Verbond> test = verb1.Distinct().ToList();

因此,用户可以连接到 0 个或多个 facturatieverbonden,也可以连接到 verbond

一个 facturatieverbonden 可以有一个或多个 verbond 在其下。

我需要的是用户直接或通过 facturatieverbonden 间接连接的所有 verbond 的列表。

我的代码有效,但我认为它不是很有效。有什么让它更干净的提示吗?

最佳答案

您的查询不是很 LINQy。这是一个潜在的改进:

           //list the direct connections to Verbond 
var test = (from q in tmpuser.UsersVerbondens
            where q.Schooljaar.Sch_Schooljaar == schooljaarparam
            select q.Verbond)
           //return distinct values
           .Union
           //list the connected Facturatieverbonden 
           (from q in tmpuser.UsersFacturatieVerbondens
            where q.Schooljaar.Sch_Schooljaar == schooljaarparam
            from v in q.FacturatieVerbonden.Verbonds
            select v)
           //return a List
           .ToList();

通过将 ToList 作为它做的最后一件事,整个计算可以在数据库中完成,避免所有中间列表。

关于c# - Linq 语句需要优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441972/

相关文章:

c# - LINQ:何时使用编译查询?

linq-to-sql - 如何测试 Linq to SQL 查询是否不返回任何行?

c# - 访问另一个线程中的方法返回的值

c# - 无法创建类型为 'System.Char' 的常量值

c# - 在没有 ToList() 的情况下运行时,在 Linq 的 SelectMany() 中读取文件会抛出 System.IO.IOException

c# - 如何计算日期时间列表中的日期数

c# - 从 DataTable 中过滤数据

c# - "No supported translation to SQL"反序列化 IQueryable 表达式后

C# 将数组类型的对象转换为 T,其中 T 是数组?

c# - 如何在 C# 中测试文件是否是 .Net 程序集