繁体   English   中英

在一个 sql 查询 (EF6) 中使用 linq 到 select 多个数据库列的可能值

[英]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.

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