使用linq为一个SQL查询(EF6)中的多个数据库列选择可能的值



假设我有一个带有Col1, Col2,... Coln...的表Entity

在我的应用程序中,我有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选项,但是您有一个结果列表,您可以将其拆分为两个列表,以获得相同的结果。因此,只要您想要两个列表,就没有比这更好的解决方案了。

考虑在数据库级别上执行视图/物化视图,特别是在表较大的情况下。但即便如此,如果你做了一个请求,你也只有一个结果列表。

一个更并行的代码版本:

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;

最新更新