2015-09-30 2 views
1

Я использую структуру сущности, и у меня есть таблица. ДанныеКак проверить данные в рамках структуры сущности цикла?

Code Check Num 
C1  true 10 
C1  false 20 
C2  true 15 
C1  false 15 
C1  true 15 
C1  true 20 
C2  false 10 

Хорошо, и я фильтровать данные по коду = «С1» и нашел строку с Check = «истинной» и Num = «15». Я использую код следующим образом:

var list = db.PRODUCTes.Where(e=>e.Code == C1); 
var flag=0; 
foreach (var item in list) 
{ 
    if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15) 
    { 
     flag = 1; 
    } 
    else 
     flag = 2; 
} 
return flag; 

Когда я запускаю его, значение флага равно 2. Я думаю, что это не работает.

+0

Я сомневаюсь, что ваш код даже выдает какое-то исключение в '.SingleOrDefault()'. Ваш 'list.Select (e => e.Check)' наверняка имеет более одного элемента, поэтому 'SingleOrDefault' будет генерировать исключение. Странно, что у вас нет такого исключения? – Hopeless

+0

в следующий раз, пожалуйста, будьте *** честными *** при описании того, что вы сделали, смешно слышать это *** Когда вы его запускаете, значение флага составляет 2 *** с тем, что вы разместили. – Hopeless

+0

Почему вы использовали цикл foreach? Я спрашиваю, потому что я не видел «предмет» в любом месте ... –

ответ

6

Почему бы не использовать перечислимый Любой? Ref

var flag = db.PRODUCTes.Any(e => e.Code == C1 && e.Check && e.Num == 15) ? 1 : 2; 

A? является условным оператором в C#. Читайте об этом here.

+0

Это работает. Счастливый код. Спасибо –

1

Это происходит потому, что вы по-прежнему итерацию после обнаружения требуемого значения в результате сброса значения флага до 2. Вы должны сломаться после нахождения значения:

if (list.Select(e => e.Check).SingleOrDefault() == true && list.Select(e => e.Num).SingleOrDefault() == 15) 
{ 
    flag = 1; 
    break; 
} 
1

Если я правильно понял, вы хотите проверить свой список, если какой-либо из предметов имеет проверку «true» и num = '15'. Вы можете сделать это с помощью следующего кода:

var list = db.PRODUCTes.Where(e=>e.Code == C1); 
if(list.Any(e => e.Check == true && e.Num == "15")) 
    return 1; 
return 2; 

Причины, почему он не для вас раньше потому, что вы перезаписать переменный флаг, из цикла Еогеаспа.

+0

Это выглядит хорошо и полезно для меня, спасибо –

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

  • Нет связанных вопросов^_^