2012-07-18 60 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