我正在尝试向我的搜索页面添加一项功能。基本上,如果某个条件为真(基于与另一个表的连接),则应用一些 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
. 存在 Key 存在MyTable
但不存在的情况SomeTable