0

linq で次の SQL クエリを複製しようとしています。

Select
     l.*,
    ISNULL( i.InterestPercentage,0)
     as InterestPercentage
FROM properties l
LEFT JOIN interest i on i.ListingKey = l.ListingKey
Where i.userId = {0}

現時点では、あまりやることがありません。

var results = from l in context.properties
              join s in context.interest on l.ListingKey equals s.ListingKey
              where s.userId == "";

これは完全な結合を返しますが、1 つの追加値であるInterestPercentage. InterestPercentage の追加プロパティを持つプロパティのすべての列である新しいオブジェクトを作成する必要があると思います。次に、追加しselect new MyObject { tons of property setters }ます。

さらに、Odata を介してこれを公開しようとしていますが、これを行うとクエリ可能な機能が失われますか?

4

3 に答える 3

2

戻してみることができます

new {MainObj = l, InterestPercentage = (your calculated field)}

または、上記と同様の構造を持つオブジェクトを作成します。これにより、すべてのプロパティ設定を回避できます。

于 2013-02-11T04:05:27.967 に答える
0

このクエリを OData 経由で公開する場合、結合を使用しないように書き直す必要があります。OData は結合をサポートしていませんが、拡張をサポートしています。つまり、関連するコレクションを単一の要求でフェッチします。OData クエリを拡張できるようにするには、メタデータでそれぞれの関係を定義する必要があります。 ListingKey (またはこれら 2 つを参照する別のテーブル) で。

于 2013-02-11T09:41:00.350 に答える
0

を使用する必要はありませんjoin独自の明示的な結合を作成して、結合をシミュレートできます。

var results = from prp in context.properties
              from inr in context.interest // cross join

              // your own join phrase
              where inr.ListingKey == (prp.InterestPercentage ?? 0)
                    && inr.userId == ""
              select new { ... };
于 2013-02-11T13:18:13.433 に答える