我是LINQ的新手,我在编写一个查询时遇到麻烦,我正在写自己的LINQ。
我有一个MyError对象列表。 MyError对象具有错误代码(枚举)和MyEntryError对象的arraylist。某些MyError可能具有相同的错误代码。
我想创建一个LINQ查询,将MyError列表作为输入,并输出一个新的MyError列表,这样,对于每个错误代码,只有一个MyError将包含失败的所有MyEntryError,错误代码为MyError。
我的意思是说我有一个MyError对象列表,例如:
我想要的输出是具有以下对象的MyError对象列表:
LINQ可以吗?如果是这样,怎么样?
我猜测在MyError类中使用ArrayList而不是List可能是一个问题所以如果无法使用ArrayList,我希望看到一个可以使用修改后的MyError类的查询使用List
提前致谢
答案 0 :(得分:2)
public List<MyError> GroupErrorsByErrorCode(List<MyError> errors)
{
var result = errors.GroupBy(e => e.ErrorCode).Select(group => new MyError
{
ErrorCode = group.Key,
// EDIT: was
// Errors = group.SelectMany(g => g.Errors)
Errors = new ArrayList(group
.SelectMany(g => g.Errors.Cast<MyEntryError>())
.ToList())
});
return result;
}
编辑:由于ArrayList有一个带ICollection的构造函数,您可以使用该重载来实例化Errors属性。
使用强类型列表而不是ArrayList总是一个好主意......
答案 1 :(得分:1)
之类的,其中errorList
是MyError1 t / m MyError5的列表,而你的arraylist称为errors
。
from err in errorList
group err by err.errorcode into g
select new MyError { errorcode = g.Key, errors = new ArrayList(g.SelectMany(a => a.errors.Cast<YourType>()).ToArray()) };