是否有一种方法来做以下使用LINQ?
foreach (var c in collection)
{
c.PropertyToSet = value;
}
为了澄清,我希望遍历集合中的每个对象,然后更新每个对象的属性。
我的用例是我在一篇博客文章上有一堆评论,我想迭代一篇博客文章上的每一条评论,并将博客文章上的datetime设置为+10小时。我可以用SQL来做,但我想把它保留在业务层。
是否有一种方法来做以下使用LINQ?
foreach (var c in collection)
{
c.PropertyToSet = value;
}
为了澄清,我希望遍历集合中的每个对象,然后更新每个对象的属性。
我的用例是我在一篇博客文章上有一堆评论,我想迭代一篇博客文章上的每一条评论,并将博客文章上的datetime设置为+10小时。我可以用SQL来做,但我想把它保留在业务层。
当前回答
你可以使用Magiq,一个LINQ的批处理操作框架。
其他回答
Use:
ListOfStuff.Where(w => w.Thing == value).ToList().ForEach(f => f.OtherThing = vauleForNewOtherThing);
我不确定这是否过度使用LINQ,但当我想要更新列表中特定条件的特定项时,它已经为我工作了。
这是我使用的扩展方法…
/// <summary>
/// Executes an Update statement block on all elements in an IEnumerable of T
/// sequence.
/// </summary>
/// <typeparam name="TSource">The source element type.</typeparam>
/// <param name="source">The source sequence.</param>
/// <param name="action">The action method to execute for each element.</param>
/// <returns>The number of records affected.</returns>
public static int Update<TSource>(this IEnumerable<TSource> source, Func<TSource> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
if (typeof (TSource).IsValueType)
throw new NotSupportedException("value type elements are not supported by update.");
var count = 0;
foreach (var element in source)
{
action(element);
count++;
}
return count;
}
实际上我找到了一个扩展方法,可以很好地完成我想要的
public static IEnumerable<T> ForEach<T>(
this IEnumerable<T> source,
Action<T> act)
{
foreach (T element in source) act(element);
return source;
}
虽然您可以使用ForEach扩展方法,但如果您只想使用框架,则可以这样做
collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();
由于延迟求值,需要使用ToList来立即求值选择。
我的2便士:-
collection.Count(v => (v.PropertyToUpdate = newValue) == null);