来自 string[] 数组列的 Distinct() 字符串,如何使用纯 LINQ 获取它?
Distinct() strings from column of string[] array, how to get this with pure LINQ?
我找不到任何类似的例子。在我的数据库中,我有一列 string[]
数组,它们用逗号分隔。 3 行示例:
id1: apple, orange, banana, kiwi
id2: orange, kiwi
id3: lemon, pineaple, kiwi
我需要使用 LINQ 从这个列表中提取不同字符串的列表:apple, orange, banana, kiwi, lemon, pineapple
.
我设法做到了,但不是纯粹的 LINQ,但是当还使用 foreach
:
public async Task<List<string>> GetFruitDetailedType()
{
List<string> all = new List<string>();
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
foreach (var item in qry)
{
foreach(var type in item)
{
all.Add(type);
}
}
return (from w in all select w).Distinct().ToList();
}
有没有一种方法可以只使用 LINQ,而无需调用所有实体的对象?
注意:使用 EF Core 2。
删除嵌套的 for 循环非常简单,因为您只是对集合的集合进行平面映射。为此,您需要的 LINQ 扩展是 SelectMany。使用它,您可以将函数简化为如下所示:
public async Task<List<string>> GetFruitDetailedType()
{
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
return qry.SelectMany(x => x).Distinct().ToList();
}
我还没有测试过以下内容,但我也怀疑它也可以工作:
public async Task<List<string>> GetFruitDetailedType()
{
return await GetFruitsQueryable().SelectMany(x => x.DetailedType)
.Distinct()
.ToListAsync();
}
我找不到任何类似的例子。在我的数据库中,我有一列 string[]
数组,它们用逗号分隔。 3 行示例:
id1: apple, orange, banana, kiwi
id2: orange, kiwi
id3: lemon, pineaple, kiwi
我需要使用 LINQ 从这个列表中提取不同字符串的列表:apple, orange, banana, kiwi, lemon, pineapple
.
我设法做到了,但不是纯粹的 LINQ,但是当还使用 foreach
:
public async Task<List<string>> GetFruitDetailedType()
{
List<string> all = new List<string>();
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
foreach (var item in qry)
{
foreach(var type in item)
{
all.Add(type);
}
}
return (from w in all select w).Distinct().ToList();
}
有没有一种方法可以只使用 LINQ,而无需调用所有实体的对象?
注意:使用 EF Core 2。
删除嵌套的 for 循环非常简单,因为您只是对集合的集合进行平面映射。为此,您需要的 LINQ 扩展是 SelectMany。使用它,您可以将函数简化为如下所示:
public async Task<List<string>> GetFruitDetailedType()
{
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
return qry.SelectMany(x => x).Distinct().ToList();
}
我还没有测试过以下内容,但我也怀疑它也可以工作:
public async Task<List<string>> GetFruitDetailedType()
{
return await GetFruitsQueryable().SelectMany(x => x.DetailedType)
.Distinct()
.ToListAsync();
}