如果我想迭代一个集合,并在集合中的每个元素上调用一个函数,我可以使用:
foreach (var obj in objColl)
{
MyFunction(obj);
}
Run Code Online (Sandbox Code Playgroud)
我是否应该使用linq执行此操作,我可以使用以下任一方法:
//#1
var unused = (from var obj in objColl select MyFunction(obj)).ToList();
//#2
var unused = objColl.Select(obj => MyFunction(obj)).ToList();
Run Code Online (Sandbox Code Playgroud)
我知道这有效,但似乎不对.当然,我的实际案例是更复杂的查询,但由于我可以使用Linq构建我的IQueryable并迭代它并调用该函数,因此归结为此.
编辑:以下是我所做的一个例子.(项目#是我无法透露的事情)
var dummyValue = (from
Item7 in dal.GetAgencyConvertions().Where(age => age.SourceName == "Item1" && age.TargetName == "Item2")
join Item6 in dal.GetAgencyConvertions().Where(age => age.SourceName == "Item2" && age.TargetName == "Item3") on Item6.TargetValue equals Item7.SourceValue
join agency in dal.GetAgencies() on Item7.SourceValue equals agency.Agency
orderby Item7.TargetValue
select vl.ValueListItems.Add(agency.ID, Item7.TargetValue)).ToList();
Run Code Online (Sandbox Code Playgroud)
简单地说foreach,因为您显然希望对集合中的对象执行操作(和/或使用),而不是希望项目/过滤器/组/等.序列中的项目.LINQ是关于后一组操作的.
编辑:在更新的情况下,我只是创建一个查询,然后迭代foreach中的查询以执行操作.
var query = from Item7 in dal.GetAgencyConvertions().Where(age => age.SourceName == "Item1" && age.TargetName == "Item2")
join Item6 in dal.GetAgencyConvertions().Where(age => age.SourceName == "Item2" && age.TargetName == "Item3") on Item6.TargetValue equals Item7.SourceValue
join agency in dal.GetAgencies() on Item7.SourceValue equals agency.Agency
orderby Item7.TargetValue
select new { ID = agency.ID, Value = Item7.TargetValue };
foreach (var item in query)
vl.ValueListItems.Add(item.ID, item.Value);
Run Code Online (Sandbox Code Playgroud)
坦率地说,你的代码中有相同的循环,你只需使用ToList()扩展方法来掩盖它.作为副产品,您正在创建一个您无意使用的值列表,同时有点模糊代码的真实意图,所有这些都可以保存几个字符.
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |