2013-02-13 5 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로 설정 하시겠습니까 수 있습니까?

편집

내 솔루션

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' 둘 다 * 설정 * 속성이 아닌 * 질의 *이다. (실제로 LINQ가 목표로하는 것은 바로 이것입니다.) 현재 당신이 달성하고자하는 것은 분명하지 않습니다. –

+0

죄송합니다. .select (x => new {isSelected = true}) –

+0

'true'로 설정할 항목을 어떻게 식별 하시겠습니까? –

답변

2

LINQ의 'Q'는 쿼리를 나타냅니다. 쿼리는 아무 것도 업데이트하지 않으므로 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; 
} 

, 그것은 훨씬 더 긴 코드를 만드는 가장 쉽고 간결한 해결책이 될 것이다 .

또 다른 방법이 될 것입니다 : 간단한 foreach 버전으로 다시

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

, 아니 장점.

0

unselectedTypes.IsSelected = false;이 마지막에 오므로 솔루션에서 모든 항목을 선택 취소합니다. 당신은 이것을 할 수있다 :

foreach (var unselectedType in entity.MeterReadingTypes) 
{ 
    unselectedType.IsSelected = (unselectedType.Name == "C"); 
} 
관련 문제