[英]Lambda Statements in Linq
是否有可能在Linq中执行以下操作?
List<Group> groupsCollection = new List<Group>();
groups.Select( g => {
String id = g.Attributes["id"].Value;
String title = g.Attributes["title"].Value;
groupsCollection.Add( new Group(id, title) );
} );
这只是一个例子。 我知道Foreach循环就足够了,但我在询问它是否可行。
我试过了,它说:
Cannot convert lambda expression to type System.Collections.IEnumerable<CsQuery.IDomObject> because it's not a delegate type
编辑:组是我的自定义类。 组是CsQuery Dom对象的集合。 您可以将它们视为html锚元素的集合。 它们是IEnumerable。
我想你正在寻找这个:
groupsCollection = groups.Select(g =>
new Group(g.Attributes["id"].Value,
g.Attributes["title"].Value)).ToList();
说明:
Select()
将序列的每个元素投影到新表单中。 (来自MSDN )
它基本上是一个转换函数,它接受一个IEnumerable并以任何你喜欢的方式将它转换为另一个IEnumerable,这似乎正是你想要的。
Select()
接受一个返回值的lambda表达式; 它不应该有任何生效。
你要
var groupsCollection = groups.Select(g => {
return ...;
}).ToList();
您可以使用构造函数使用查询对其进行初始化:
var query = groups.Select( g => {
String id = g.Attributes["id"].Value;
String title = g.Attributes["title"].Value;
return new Group(id, title);
});
List<Group> groupsCollection = new List<Group>(query);
不要修改linq查询中的colections,而是选择可用于修改集合的数据。
正如你所说,你知道使用ForEach
是相关的。 但是,如果你能以另一种方式做到这一点,你只是好奇 。 正如其他人指出的那样,您可以使用Select
但{...}
的代码应该返回一些值。 但是,您可以这样做,如果您想使用TakeWhile
根据某些条件stop
或break
循环,这样做会更好:
groups.TakeWhile( g => {
String id = g.Attributes["id"].Value;
String title = g.Attributes["title"].Value;
groupsCollection.Add( new Group(id, title) );
return true;//If you want to break the loop, just return false accordingly.
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.