C# 如何在LINQ中检查以前的数据?
我有一个数据集合,用于检查特定字段中是否有更改,以获取另一列的总和C# 如何在LINQ中检查以前的数据?,c#,.net,asp.net,asp.net-mvc,linq,C#,.net,Asp.net,Asp.net Mvc,Linq,我有一个数据集合,用于检查特定字段中是否有更改,以获取另一列的总和 Total = Details.Where(s=>s.indicator != *prior indicator before this...).Sum(s => s.amount); 我不认为LINQ本身可以让您了解数据更改前的状态。我想您可以做的是在数据即将更改时设置一个事件(onchange)并订阅该事件,然后发送事件参数更改前的金额 现在,如果您想以LINQ方式完成所有这一切,您应该查看MS正在开发的Rx(
Total = Details.Where(s=>s.indicator != *prior indicator before this...).Sum(s => s.amount);
我不认为LINQ本身可以让您了解数据更改前的状态。我想您可以做的是在数据即将更改时设置一个事件(onchange)并订阅该事件,然后发送事件参数更改前的金额 现在,如果您想以LINQ方式完成所有这一切,您应该查看MS正在开发的Rx(反应式)API,其全部内容是以LINQ方式使用事件
如果您使用的集合通知您元素中的更改。。然后可能会传递一个参数,告诉您更改的数据。您可以使用分部类,然后使用OnFIELDChanging事件检测更改并在其他位置调用事件 因此,如果在.dbml文件中有一个名为sayFirstName的属性的用户表,那么可以创建另一个类似这样的类
public partial class User
{
partial void OnFirstNameChanging(string value)
{
}
}
传递的值是属性更改为的新值
这对您的要求有帮助吗?或者我的要求有偏差吗?如果您有两组数据,您可以使用zip方法(.Net 4.0)这样做 如果不使用.net 4.0,可以使用以下zip实现:
static class Enumerable
{
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second, Func<TFirst, TSecond, TResult> func)
{
var ie1 = first.GetEnumerator();
var ie2 = second.GetEnumerator();
while (ie1.MoveNext() && ie2.MoveNext())
yield return func(ie1.Current, ie2.Current);
}
}
静态类可枚举
{
公共静态IEnumerable Zip(此IEnumerable第一,IEnumerable第二,Func-Func)
{
var ie1=first.GetEnumerator();
var ie2=second.GetEnumerator();
而(ie1.MoveNext()&&ie2.MoveNext())
收益回报函数(ie1.Current,ie2.Current);
}
}
static class Enumerable
{
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second, Func<TFirst, TSecond, TResult> func)
{
var ie1 = first.GetEnumerator();
var ie2 = second.GetEnumerator();
while (ie1.MoveNext() && ie2.MoveNext())
yield return func(ie1.Current, ie2.Current);
}
}