2013-02-13 2 views
0

МодельLinq задал свойство в списке?

class MeterReadingTypes 
{ 
    int id { get; set;} 
    bool isSelected { get; set; } 
    string Name { get; set; } 
    ..... 
} 

Linq

entity.MeterReadingTypes; 

Есть записи, что имеет истинное или ложное значение, и я хочу, чтобы установить только одно значение истинно, другие ложные.

Orginal Список

id | isSelected | Name | 
------------------------ 
1 |  false | A | 
2 |  false | B | 
3 |  true | C | 
3 |  true | D | 
5 |  false | E | 
6 |  false | F | 
7 |  true | G | 

Я хочу установить этот список следующим образом:

id | isSelected | .. | 
----------------- 
1 |  false | A | 
2 |  false | B | 
3 |  true | C | 
4 |  false | D | 
5 |  false | E | 
6 |  false | F | 
7 |  false | G | 

Могу ли я это, я хочу только одно свойство установить в true?

EDIT

Мое решение

List<OsosPlus2.Core.DataAccess.MeterReadingTypes> types = new List<Core.DataAccess.MeterReadingTypes>(); 

foreach (var unselectedTypes in entity.MeterReadingTypes) 
{ 
    if(unselectedTypes.Name == "C") unselectedTypes.IsSelected = true; 
    unselectedTypes.IsSelected = false; 
    types.Add(unselectedTypes); 
} 

return PartialView(types); 

Есть ли элегантное решение?

+1

Как 'Select', так и' Where' около * querying *, not * setting * properties. (И на самом деле это то, на что нацелен LINQ). На самом деле не совсем ясно, чего вы пытаетесь достичь на данный момент. –

+0

Извините, я имею в виду .select (x => new {isSelected = true}) –

+0

Как бы вы определили, какой элемент установить в 'true'? –

ответ

2

«Q» в LINQ означает запрос. Запросы ничего не обновляют, поэтому LINQ не является правильным способом обновления ваших объектов. Самое простое и наиболее краткое решение было бы это:

foreach(var type in entity.MeterReadingTypes) 
    type.IsSelected = type.MeterType == typeId; 

Если вы настаиваете на использование какого-то LINQ, вы могли бы пойти с этим:

foreach(var unselectedType in entity.MeterReadingTypes 
            .Where(x => x.MeterType != typeId)) 
{ 
    unselectedType.IsSelected = false; 
} 

foreach(var selectedType in entity.MeterReadingTypes 
            .Where(x => x.MeterType == typeId)) 
{ 
    selectedType.IsSelected = true; 
} 

Как вы можете видеть, это делает код намного больше ,

Другой подход это:

entity.MeterReadingTypes.Select(x => { x.IsSelected = types.MeterType == typeId; 
             return x; }); 

Опять же, не дает никаких преимуществ в простой foreach версии.

0

Вы решили установить все элементы, не выбранные, потому что unselectedTypes.IsSelected = false; подходит для всех. Вы можете сделать это:

foreach (var unselectedType in entity.MeterReadingTypes) 
{ 
    unselectedType.IsSelected = (unselectedType.Name == "C"); 
} 
Смежные вопросы