繁体   English   中英

使用LINQ减少针对“按记录”查找的SQL查询

[英]Reducing SQL queries with LINQ for 'per-record' lookups

首先,如果标题有误导性,对不起,请根据需要随时更改。

我在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查询该视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM