2013-04-23 74 views
2

這裏是我的代碼全部選擇,通過其中LINQ條款

Name obj = new Name(); 
obj = DB.Names.Where(x => x.age == 20).SingleOrDefault(); 

我想要做的就是更新所有Nameage=20

obj.Name = " Mr " + obj.Name ; 
DB.SubmitChanges(); 

.SingleOrDefault()只能返回一個值,我想用age=20得到所有。

回答

4

Where()已經返回所有匹配項目。您不需要添加任何其他內容。試試這個:

foreach(var item in DB.Names.Where(x => x.age == 20)) 
{ 
    item.Name = " Mr " + item.Name; 
} 
1

爲什麼你使用SingleOrDefault?試試這個:

var result = DB.Names.Where(x => x.age == 20).ToList() 
4

DB.Names.Where(x => x.age == 20)返回IEnumerable<Name>,你可以遍歷與foreach修改每個條目。

+0

+1 :),非常感謝! – zey 2013-04-23 06:03:33

+0

當然,僅僅因爲他/她假設你不能實現'foreach'循環而給予@JLRishe接受的答案。 ;) – dahlbyk 2013-04-23 06:08:36

+0

:),但它更完美? – zey 2013-04-23 06:17:48

1

Where將返回列表匹配條件

List<Name> nameList = DB.Names.Where(x => x.age == 20); 
foreach(var name in nameList) 
{ 
    name.Name = " Mr " + name.Name ; 
} 
DB.SubmitChanges(); 
0

但.SingleOrDefault()只能返回一個值,我想所有 隨着年齡= 20。

是的,所以刪除SingleOrDefault()你會得到所有記錄匹配的條件 ,你也可以再嘗試使用Foreach更新您從最初的名字過濾每一個項目。

嘗試下面的代碼:

DB.Names.Where(x => x.age == 20).ToList().ForEach(n=>n.Name = " Mr " + n.Name); 
+1

+1不同的解決方案。 – 2013-04-23 05:54:30

+2

@HosseinNarimaniRad不幸的是,它不編譯,因爲IEnumerable 沒有'Foreach()'方法。 – JLRishe 2013-04-23 06:09:54

+0

@JLRishe謝謝 – 2013-04-23 06:11:44