Пользовательский запрос LINQ в Lightswitch

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

query = query.Where(i => i.IntValue == 100); 

Это не возвращает никаких результатов, хотя в базе данных явно есть совпадающие значения.

Однако работает следующее:

query = query.Where(i => i.StringValue == "value"); 

Здесь нет никаких вычисляемых полей, с которыми я уже сталкивался раньше. Что мне не хватает?


person Devin Goble    schedule 04.10.2012    source источник
comment
ваш IntValue, вероятно, имеет значение NULL. попробуйте query = query.Where(i =› i.IntValue.HasValue && I.IntValue.Value == 100);   -  person Chielus    schedule 10.10.2012


Ответы (2)


Как я уже говорил в своем ответе на ваш вопрос на форуме LightSwitch, я постоянно использую этот тип сравнения в методах PreProcessQuery, поэтому, если были проверены следующие сценарии, этой ошибки быть не должно.

Собственность:

  1. Типа int (не byte, short, long, string и т. д.)

  2. Не обнуляется

Одна вещь, которая не была предложена в вашем сообщении на форуме (на самом деле, я только что проверил сообщение, и этот синтаксис был действительно предложен, но я оставлю его здесь для других, на случай, если они не понимают, что существует два синтаксиса), стоит попробовать «альтернативный синтаксис».

query = from q in query 
        where q.IntValue == 100
        select q;

Синтаксис не должен иметь никакого значения, но опять же, ошибки быть не должно.

person Yann Duran    schedule 05.10.2012
comment
Спасибо, что вы также на Stackoverflow, Янн. Я перекрестился, потому что не все успевают за обоими форумами. - person Devin Goble; 11.10.2012
comment
Я стараюсь помочь, чем могу. Я просто предлагаю, если вы делаете кросс-пост, поставить ссылку на другой пост, как вы сделали в своем ответе. Честно говоря, иногда я на полпути к ответу и думаю, что это звучит знакомо, разве я где-то не отвечал на этот вопрос. Я рад, что вы нашли свое решение. - person Yann Duran; 16.10.2012

В данном конкретном случае оказалось, что у меня остались остатки запроса, построенного с помощью конструктора запросов Lightswitch. Оба запроса могут сосуществовать и дополнять друг друга, но (как в данном случае) могут и мешать. После очистки запроса от дизайнера мой запрос на основе кода работал отлично.

Для справки в будущем: если вы начнете с запроса в дизайнере и решите переключиться, вам следует не забыть удалить все содержимое в дизайнере. В сообщении на форуме Lightswitch Ян упомянул, что он всегда по умолчанию строит запрос в коде, что, вероятно, является хорошей идеей, если у вас есть что-то большее, чем простые запросы.

person Devin Goble    schedule 10.10.2012