[]从string []数组的列中分离出来的字符串,如何使用纯LINQ获得它?

问题描述 投票:0回答:1

我找不到任何类似的例子。在我的数据库中,我有一列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。

c# asp.net-core ef-core-2.0
1个回答
0
投票

删除嵌套的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();
}
© www.soinside.com 2019 - 2024. All rights reserved.