2011-02-07 85 views
3

我正在從Web服務獲取MySql數據庫中的客戶數據和客戶對象的數據表。最有效的方法來比較很多變量? C#

我想比較數據表中的每個值與對象中的值,如果有一個不同的字段我想執行一些任務。

我知道我可以從數據表以獲取值:

string mCompanyName = row["Company Name"].ToString(); 
string mCreatedDate = row["Created Date"].Tostring(); 
//etc.. 

然後我從Web服務獲取值

string wsCompanyName = customer.companyName; 
string wsCreatedDate = customer.createdDate; 

大約有50場和做

if(mCompanyName != wsCompanyName & mCreatedDate != wsCreatedDate and so on..) (or similar) 
{ 
    //Do something 
} 

似乎有點乏味,不太好,所以我應該怎麼做?有沒有更好的方法將它列入清單並使用一些奇特的LINQ?

在此先感謝。

回答

1

我把它們放在一個字典和搜索方式:

Dictionary<string, string> mData = new Dictionary<string, string>(); 

mData.Add("Company Name", row["Company Name"].ToString()); 


Dictionary<string, string> wsData = new Dictionary<string, string>(); 

wsData.Add("Company Name", customer.CompanyName); 

然後遍歷:

foreach (KeyValuePair<string, string> pair in mData) 
{ 
    if (wsData[pair.Key] == pair.Value) 
    { 
     // Do something 
    } 
} 

這樣,在MDATA每個條目(從數據庫中的數據)它會在wsData中查找具有相同名稱的條目。

我不會爲每一塊數據創建單獨的變量。這將很難保持,並且不能很好地擴展(大量的複製和粘貼)。

+0

感謝您的mfanto,雖然只是一個問題,這非常適用於一個類型,但我會怎麼做,如果某些值是int,一些日期,一些雙重等等? – Nick 2011-02-08 00:09:50

2

對於這樣的情況,我有時會把它們(「對象」)放在IEnumerable(確保將它們排成一行)並使用SequenceEqual擴展方法。它執行標準Equals()'ity,並且「足夠便宜以供我使用」。

例如:

var equal = (new object[] { row["A"], row["B"] }) 
    .SequenceEqual(new object[] { x.A, x.B }); 

這當然需要的LINQ。

0

我想這可能會幫助你,但它需要修改這個在你之情況使用stackoverflow link