[英]Using linq to select possible values for multiple database columns in one sql query (EF6)
假设我有一个表实体,其中包含 Col1、Col2、... Coln ... 在我的应用程序中,我有 List1、List2、... Listn ...。我需要将列中的可能值分别加载到列表中。
我可以使用多个 linq 查询来做到这一点:
list1 = await context.Entities.Select(e => e.Col1).Distinct().ToListAsync();
list2 = await context.Entities.Select(e => e.Col2).Distinct().ToListAsync();
...
我也可以同时进行,但它仍然涉及多个 sql 查询,每一列(列表)一个。
是否可以仅在一个 sql 查询中执行此操作?
我使用 EF6 作为 ORM。
你不能这样做:
var list1 = await context.Entities.Select(e => new { e.Col1, e.Cal2}).Distinct().ToListAsync();
因为在这种情况下不同的是不同的(组合不同的)
您可以尝试 JOIN 选项,但是您有 1 个结果列表,您可以将其拆分为两个列表,以获得相同的结果。 只要你想要两个列表作为结果,就没有更好的解决方案而没有其他缺点。
考虑在数据库级别执行视图/物化视图,特别是在表较大的情况下。 但即便如此,如果你做一个请求,你就会得到一个结果列表。
您的代码的更并行版本:
var task1= context.Entities.Select(e => e.Col1).Distinct().ToListAsync();
var task2 = context.Entities.Select(e => e.Col2).Distinct().ToListAsync();
var list1 = await task1;
var list2 = await task2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.