簡體   English   中英

如何在LINQ中檢查以前的數據?

[英]How do I Check previous data in LINQ?

我有一組數據,用於檢查特定字段中是否有更改以獲取另一列的總和。

Total = Details.Where(s=>s.indicator != *prior indicator before this...).Sum(s => s.amount);

我不認為LINQ本身可以使您在更改數據之前獲得狀態。 我想您可以做的是在數據將要更改時設置一個事件(OnChanging)並訂閱該事件,然后在事件參數更改之前發送金額。

現在,如果您希望以LINQ方式進行所有操作,則應查看MS正在處理的Rx(響應)API,有關以LINQ方式使用事件的所有信息。

如果使用的集合會通知您元素中的更改。那么可能會傳遞一個參數,告訴您更改的數據。

您可以使用部分類,然后使用OnFIELDChanging事件檢測更改並在其他位置調用事件。

因此,如果您的.dbml文件中有一個User表,該表具有名為firstName的屬性,則可以創建另一個這樣的類;

public partial class User
{
    partial void OnFirstNameChanging(string value)
    {
    }
}

傳遞的值是屬性更改為的新值。

這是否對您的要求有所幫助?

如果您有兩個數據集合,則可以使用zip方法(.Net 4.0),如下所示

var Total = currentData.Zip(previousData,(current,previous) => current.indicator != previous.indicator ? current.amount : 0).Sum();

如果您不使用.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); 
 } 
}

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM