Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# string[]数组列中的Distinct()字符串,如何使用纯LINQ获得它?_C#_Asp.net Core_Ef Core 2.0 - Fatal编程技术网

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看起来你是对的。非常感谢。这比我的方法更有效吗?你有什么想法吗?