Могу ли я иметь условие в выборе запроса Linq to Entities? - PullRequest
0 голосов
/ 29 марта 2011

Я хочу сделать это:

Dim person = From p In context.persons
  Order By p.fileNum
  Select p.ID,
    p.firstName,
    p.lastName,
    startPenpal = IIf(p.prPenPals.Count > 0,
        p.prPenPals.FirstOrDefault.startProfile, "")

Я получаю эту ошибку:

LINQ to Entities не распознает метод метода System.Object IIf (Boolean, System.Object, System.Object), и этот метод нельзя преобразовать в выражение хранилища.

Я пытался

Select p.ID, p.firstName, p.lastName,
    startPenpal = If(i.prPenPals.Count > 0,
        i.prPenPals.FirstOrDefault.startProfile, "")

и я получаю эту ошибку:

Невозможно привести тип 'System.DateTime' к типу 'System.Object'. LINQ to Entities поддерживает только приведение типов примитивов Entity Data Model.

Есть ли способ сделать это? prPenpals может содержать ноль или одну запись для каждой записи в Persons. Вероятно, должна быть связь от 1 до 0-1 между людьми и prPenPal, но модель имеет ее как один ко многим, и я не смог ее изменить.

1 Ответ

0 голосов
/ 29 марта 2011

Ваша ошибка здесь, я думаю:

If(i.prPenPals.Count > 0, i.prPenPals.FirstOrDefault.startProfile, "")

Вы должны убедиться, что вы вернете тот же тип для значений.Если i.prPenPals.FirstOrDefault.startProfile является DateTime, то сделайте следующее:

If(i.prPenPals.Count > 0, i.prPenPals.FirstOrDefault.startProfile, DateAndTime.MinValue)

Не уверен насчет синтаксиса VB, потому что я на C #, но основная идея та же.

...