Lambda聚合表达式C#

时间:2017-12-22 06:01:37

标签: c# linq lambda

我有以下对象模型

class ObjectModel
{
    int id;
    string Name;
}

我需要连接Object of ObjectModel

中的名称

我使用过这个lambda表达式:

List<ObjectModel> objList = some method which returns the list
objList.Aggregate((a, b) => a.Name + " " + b.Name);

但是我收到了错误

  

无法将字符串隐式转换为ObjectModel

我只需要使用lambda表达式

2 个答案:

答案 0 :(得分:1)

您可以使用

var accum = string.Join(" ", objList.Select(o => o.Name));

或者像Aggregate一样:

var acc2 = objList.Aggregate("", (acc,item) => acc += " " + item).Trim(); 

您收到转换异常的原因是您的版本需要ObjectModel的输出。

您正在使用此重载:

public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, TSource, TSource> func
)
  

https://msdn.microsoft.com/en-us/library/bb548651(v=vs.110).aspx

我正在使用

public static TAccumulate Aggregate<TSource, TAccumulate>(
    this IEnumerable<TSource> source,
    TAccumulate seed,                                // ""
    Func<TAccumulate, TSource, TAccumulate> func     // (acc,item) => string
)
  

https://msdn.microsoft.com/en-us/library/bb549218(v=vs.110).aspx

你返回与IEnumeration相同的类型,我可以自由地返回我的第二个Func所做的任何类型

答案 1 :(得分:1)

试试这个;

var names = objList.Select(x => x.Name).Aggregate((a, b) => a + " " + b);

Aggregate期望ObjectModel表达式的类型,您应首先select字符串Name变量。