我正在尝试将功能添加到我的搜索页面。基本上,如果某个条件为真(基于与另一个表的连接),则应用一些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的对象。 – IronMan84 2013-03-18 17:46:03
另外,什么是'x.h.DefaultIfEmpty'? 'h'与它有什么关系? – IronMan84 2013-03-18 17:47:06
在问题的底部添加了一些信息。希望有帮助 – Jeff 2013-03-18 17:51:22