C# string[]数组列中的Distinct()字符串,如何使用纯LINQ获得它?
我找不到任何类似的例子。在我的数据库中,我有一列C# string[]数组列中的Distinct()字符串,如何使用纯LINQ获得它?,c#,asp.net-core,ef-core-2.0,C#,Asp.net Core,Ef Core 2.0,我找不到任何类似的例子。在我的数据库中,我有一列string[]array,它们用逗号分隔。3行的示例: id1: apple, orange, banana, kiwi id2: orange, kiwi id3: lemon, pineaple, kiwi 从这个列表中,我需要使用LINQ提取一个不同字符串的列表:苹果、橘子、香蕉、猕猴桃、柠檬、菠萝 我成功地做到了这一点,但不仅仅是LINQ,而是在使用foreach时: public async Task<List<strin
string[]
array,它们用逗号分隔。3行的示例:
id1: apple, orange, banana, kiwi
id2: orange, kiwi
id3: lemon, pineaple, kiwi
从这个列表中,我需要使用LINQ提取一个不同字符串的列表:苹果、橘子、香蕉、猕猴桃、柠檬、菠萝
我成功地做到了这一点,但不仅仅是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();
}
公共异步任务GetFruitDetailedType()
{
List all=新列表();
var qry=await GetFruitsQueryable()。选择(v=>v.DetailedType)。ToListSync();
foreach(qry中的var项目)
{
foreach(项目中的变量类型)
{
全部。添加(类型);
}
}
return(从所有的w中选择w).Distinct().ToList();
}
有没有一种方法可以只使用LINQ,而不调用所有实体的对象
注意:使用EF Core 2.删除嵌套for循环非常简单,因为您只是简单地对集合集合进行平面映射。您希望用于此的LINQ扩展是。使用它,您可以将功能简化为以下内容:
public async Task<List<string>> GetFruitDetailedType()
{
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
return qry.SelectMany(x => x).Distinct().ToList();
}
公共异步任务GetFruitDetailedType()
{
var qry=await GetFruitsQueryable()。选择(v=>v.DetailedType)。ToListSync();
返回qry.SelectMany(x=>x.Distinct().ToList();
}
我还没有测试以下各项,但我也怀疑它可能也会起作用:
public async Task<List<string>> GetFruitDetailedType()
{
return await GetFruitsQueryable().SelectMany(x => x.DetailedType)
.Distinct()
.ToListAsync();
}
公共异步任务GetFruitDetailedType()
{
return wait wait GetFruitsQueryable()。SelectMany(x=>x.DetailedType)
.Distinct()
.ToListAsync();
}
删除嵌套for循环非常简单,因为您只是简单地对集合集合进行平面映射。您希望用于此的LINQ扩展是。使用它,您可以将功能简化为以下内容:
public async Task<List<string>> GetFruitDetailedType()
{
var qry = await GetFruitsQueryable().Select(v => v.DetailedType).ToListAsync();
return qry.SelectMany(x => x).Distinct().ToList();
}
公共异步任务GetFruitDetailedType()
{
var qry=await GetFruitsQueryable()。选择(v=>v.DetailedType)。ToListSync();
返回qry.SelectMany(x=>x.Distinct().ToList();
}
我还没有测试以下各项,但我也怀疑它可能也会起作用:
public async Task<List<string>> GetFruitDetailedType()
{
return await GetFruitsQueryable().SelectMany(x => x.DetailedType)
.Distinct()
.ToListAsync();
}
公共异步任务GetFruitDetailedType()
{
return wait wait GetFruitsQueryable()。SelectMany(x=>x.DetailedType)
.Distinct()
.ToListAsync();
}
您正在寻找选择many
以平面映射列表。@JonathonChase看起来您是对的。非常感谢。这比我的方法更有效吗?你有什么想法吗?你正在寻找SelectMany
来平面映射列表。@JonathonChase看起来你是对的。非常感谢。这比我的方法更有效吗?你有什么想法吗?