2013-04-23 5 views
2

Вот мой код,выбрать все: где положение в LINQ

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

То, что я хочу сделать, это обновить все Name с age=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

+0

Несомненно, дайте @JLRishe принятый ответ только потому, что он/она предполагает, что вы не можете реализовать цикл foreach. ;) – dahlbyk

+0

:), но лучше ли это? – zey

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 другое решение. –

+2

@HosseinNarimaniRad К сожалению, он не компилируется, потому что IEnumerable не имеет метода 'Foreach()'. – JLRishe

+0

@JLRishe thanks –

Смежные вопросы