検索ページに機能を追加しようとしています。基本的に、(別のテーブルとの結合に基づいて) 特定の条件が true の場合、CSS クラスを適用します。ここに私の(単純化された)モデルがあります:
MyTable
int Key
string Someinfo1
string Someinfo2
string CssClass
SomeTable
int Key
string CssClass
LINQ を使用して、2 つのテーブルを結合し、割り当て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