2012-07-18 97 views
0

我想用LINQ中的空字符串替換字符串日期值「01/01/1700」。LINQ forEach with Replace

日期的類型是字符串。

這樣的事情,但我不能得到它的工作。

Query<Client>(sql).ToList().ForEach(x => x.DateOfBirth = 
    x.DateOfBirth.Replace("01/01/1700", "")); 

此代碼有效,但它不是LINQ。

 var result = Query<Client>(sql).ToList(); 
     foreach (var client in result) 
     { 
      if (client.DateOfBirth == "01/01/1700") 
      { 
       client.DateOfBirth = "n/a"; 
      } 
     } 

感謝您的幫助。

+3

「DateOfBirth」的數據類型是什麼? – dasblinkenlight 2012-07-18 15:52:32

+0

我猜這是Linq-to-Sql?如果是這樣,我建議你看看http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx。 – 2012-07-18 15:53:34

+0

不,它是一個內部的代碼,你可以把它看作一個列表謝謝 – markpcasey 2012-07-18 16:14:46

回答

3

問題是ToList()。結果在之後使用的變量中不可見。

嘗試了以下工作:

var list = Query<Client>(sql).ToList(); 
list.ForEach(l => l.DateOfBirth = l.DateOfBirth.Replace("01/01/1700", "n/a")); 

應該正常工作。之後使用list變量。

1
 var result = Query<Client>(sql).ToList(); 
     result.ForEach(l => l.DateOfBirth = l.DateOfBirth.Replace("01/01/1700", "n/a")); 
+0

這是張貼和刪除它完美的作品。如果你再次發佈,我會獎勵你的積分。謝謝 – markpcasey 2012-07-18 17:13:19

+0

未刪除它!不用謝! – 2012-07-18 17:21:45

0

你的代碼假定在List爲對象所做的更改將在該對象來自的Query<Client>反映。顯然情況並非如此。有一兩件事你可以嘗試打電話ForEach()以及使用從該點名單之前分配名單:

var clients = Query<Client>(sql).ToList(); 
clients.ForEach(x => x.DateOfBirth = x.DateOfBirth.Replace("01/01/1700", "")); 

而且,ForEach不是LINQ運營商。這是List類中的一種方法。與LINQ操作符不同,它將修改調用它的列表,並不會返回任何內容。使用LINQ「修改」數據的方法是使用select

var clients = (from client in Query<Client>(sql).ToList() 
       select new Client(client) 
         { 
          DateOfBirth = client.DateOfBirth.Replace("01/01/1700", "") 
         }).ToList(); 
+0

這可以工作,但只會返回帶有DateOfBirth的客戶,其餘成員缺失。我將不得不手動設置它們。 – markpcasey 2012-07-18 17:24:38

+0

@ markpcasey您可以爲客戶端創建複製構造函數,或者在LINQ查詢中分配成員。 – 2012-07-18 17:29:39