使用 LINQ 减少“每记录”查找的 SQL 查询

本文关键字:查找 SQL 查询 每记录 记录 LINQ 减少 使用 | 更新日期: 2023-09-27 18:31:41

首先,如果标题具有误导性,请随时更改。

我在 C# asp.net MVC 3 Web 应用程序中使用 LINQ to SQL,其中一个功能是查询"用户"集合。在使用数据之前,会应用过滤、排序和分页。这部分都很好,所有这些都是有组织的,因此在此阶段只执行一个SQL查询(为此向LINQ致敬)。

但是,我所拥有的是每个"用户"都有许多关联的表(即地址,电子邮件,数字),用户可以在其中拥有一个或多个表。现在,出于我的函数的目的,我需要收集每个关联表中的第一个条目(即"主要"记录)。我编码的方式是,对于在"过滤"部分找到的每条记录,都有一个单独的查询来提取每个主要详细记录。

我相信在这一点上你们都知道我要去哪里:我可以在不影响代码结构的情况下减少查询数量吗?

那么,下一部分,我的代码是什么样的...

(请记住,这是针对此问题总结的,可能会也可能不会编译/运行)

IQueryable<Data.User> users = GetUsers();
users = ApplyFilterSortingPaging(users);//nothing actually executed yet, still building the IQueryable
List<Models.User> results = users.Select(x => x.ToModel());

现在,您将希望看到ToModel扩展方法...

public static Models.User ToModel(this Data.User user)
{
    Models.User result = new Models.User()
    {
       Name = user.Name,
       PrimaryAddress = user.Addresses.First(),
       PrimaryEmail = user.Emails.First(),
       PrimaryNumber = user.Numbers.First()
    };
}

如您所料,对于每个联系人记录,我现在要运行额外的 3 个查询。总的来说,性能不是问题(至少目前)——一切都很快。我是否可以做些什么来将其减少到每条记录只有一个查询?甚至只是一个主要的"获取所有过滤记录+额外数据"查询?

也许这是更可读/可重用的代码的成本?

使用 LINQ 减少“每记录”查找的 SQL 查询

您可以创建数据库中所需数据的视图,然后使用 LINQ 进行查询。