2013-09-04 2 views
1

Я пытаюсь получить количество этого:Простой подсчет LINQ, или так я думал

Model.Version.Where(model => model.revision != Model.revision).Count(); 

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

Модель имеет тип Документы, которые имеют ключ к версии.

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

Это будет либо 0, либо 1, иногда может быть выше 1, я полагаю.

Что я делаю неправильно?

if (Model.Version.Where(model => model.revision > Model.revision).Count() > 0) 
{ 
    // do something 
} 
+0

Есть ли «Версия» коллекция объектов? –

+3

Используйте 'Any' вместо' Count()> 0'. –

+0

@JonLaMarr да, это может быть 0 или много. –

ответ

7

Как уже сказал, ваш реальный код должен быть хорошо: это звучит как проблема была только, что вы пытаетесь выполнить это в отладчик, а не в обычном коде. Лично я всегда склоняюсь к попытке занять слишком много места в отладчике - это может быть полезно, конечно, но если что-то ведет себя неожиданно, я всегда вижу, работает ли тот же код как часть реальной программы, а не предполагая, что в подходе есть что-то принципиально неправильное. Отладчик должен работать с довольно разными ограничениями, чем обычный процесс компиляции и выполнения.

Аналогичным образом, как говорили другие, лучше использовать Any(), чем Count() > 0. Тем не менее, уборщик все же использовать перегрузку Any принимать предикат:

if (Model.Version.Any(model => model.revision > Model.revision)) 
{ 
    ... 
} 

Заметим, однако, что это не совсем так же, как ваш первоначальный предикат, который требует какой-либо версии, в которой пересмотр в разные, а не a высшее пересмотр. Вы можете:

if (Model.Version.Any(model => model.revision != Model.revision)) 
{ 
    ... 
} 

Стоит отметить, что в LINQ к объектам, используя Any может иметь очень реальные преимущества в производительности по сравнению с использованием Count() > 0. В провайдерах, которые преобразуют запрос в другую форму (например, SQL), может быть не производительность выгода, но есть ясность . Вы можете точно сказать, что вас интересует - вам все равно, если есть любые соответствующие предметы.

+0

Да, я пытался добавить часы, которые не сработали, но с Count()> 0 он всегда будет оценивать true, даже если это не так. Но когда я использовал Any(), я бы получил правильные истинные/ложные визуальные эффекты, как ожидалось. Я бы подумал, что County() должен работать, поэтому, возможно, это было что-то маленькое, что я пропустил, и когда я сделал изменения Any(), я исправил все, что было неправильно, а также не зная. –

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