Я пытаюсь добавить функцию на свою страницу поиска. По сути, если определенное условие выполняется (основанное на соединении с другой таблицей), примените некоторый класс CSS. Вот мои (упрощенные) модели:
MyTable
int Key
string Someinfo1
string Someinfo2
string CssClass
SomeTable
int Key
string CssClass
Используя LINQ, я хочу объединить две таблицы и назначить SearchResult.CssClass = SomeTable.CssClass
. На самом деле, для этого назначения используется некоторая логика.
var test = db.MyTable
.GroupJoin(db.SomeTable,
m => m.Key,
s => s.Key,
(m, s) => new {m, s})
.SelectMany(x => x.h.DefaultIfEmpty(),
(x, y) => new MyTable
{
Key = x.m.Key,
Someinfo1 = x.m.Someinfo1,
Someinfo2 = x.m.Someinfo2,
CssClass = y.CssClass
}
Этот код ломается, выдавая ошибку
The entity or complex type 'MyTable' cannot be constructed in a LINQ to Entities query.
Если я просто изменю кастинг (x, y) => new MyTable
, чтобы создать анонимный тип (x, y) => new
, тогда все будет работать так, как я ожидаю. Хотя мне нужно, чтобы это было типизировано как MyTable
, чтобы быть совместимым с представлением, которое существует в настоящее время. Почему он ломается при попытке литья, если в остальном работает нормально? Кастинг постфактум тоже не работает. заранее спасибо
РЕДАКТИРОВАТЬ: Чтобы уточнить, MyTable
сопоставляется с таблицей базы данных, за исключением CssClass
. Я настроил EF, чтобы игнорировать этот элемент
modelBuilder.Entity<MyTable>().Ignore(m => m.CssClass);
Желаемое значение для MyTable.CssClass
исходит из SomeTable
.
DefaultIfEmpty() используется для включения всех записей в MyTable
. Бывают случаи, когда ключ существует в MyTable
, но не в SomeTable
.
db.MyTable
, а затем выбираете объект типаMyTable
. - person Corey Adler   schedule 18.03.2013x.h.DefaultIfEmpty
? При чем тутh
? - person Corey Adler   schedule 18.03.2013