Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ中检查以前的数据?_C#_.net_Asp.net_Asp.net Mvc_Linq - Fatal编程技术网

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); 
 } 
}