Linq合并2个列表选择colum

时间:2017-11-23 16:00:52

标签: c# performance linq

我有2个字符串列表,我正在合并它们但是选择了一个特定的列。 我设法得到它,但我确信有更好的方法:

public List<string> GetAll()
{
    var i = _iRepository.GetAll().Select(x => x.Name).ToList();
    var a = _aRepository.GetAll().Select(x => x.Name);
    i.AddRange(a);
    return i;
}

3 个答案:

答案 0 :(得分:3)

List<string> allNameList = _iRepository.GetAll()
    .Select(x => x.Name)
    .Concat(_aRepository.GetAll().Select(x => x.Name))
    .ToList();

如果您想删除重复项,请使用Union代替Concat

答案 1 :(得分:2)

将字符串从列表1中拉出,并将其连接到列表2中的字符串列表:

 _iRepository.Select(x => x.Name).Concat(_aRepository.Select(x => x.Name)).ToList()

PS;我不确定你有2个字符串列表 - 如果_iRepository是字符串列表,你将无法选择x.Name,因为字符串没有.Name属性!列表是List<SomeObjectThatHasANameProperty>,当然......?

答案 2 :(得分:0)

更短(假设两个GetAll()返回相同的类型):

return _iRepository.GetAll().Concat(_aRepository.GetAll()).Select(x => x.Name).ToList();

如果GetAll()返回一个新列表,则效率更高(内存分配更少):

var list = _iRepository.GetAll();
list.AddRange(_aRepository.GetAll());
return list.ConvertAll(x => x.Name);