0

Telerik OpenAccess で生成されたデータ モデルで LINQ を使用して、検索クエリを設定し、結果を取得しています。これはすべて非常にうまく機能し、コードは非常に見栄えがします。しかし、もう1つ追加する必要がありますが、どうすればよいかわかりません。私が選択している製品は、顧客ごとに異なる価格を設定する必要があります。価格は、他の 2 つの SQL テーブルの他の値によって異なります。現在、SQL スカラー関数で価格計算を行っていますが、それを LINQ と組み合わせて使用​​する方法がわかりません。

私の目標は、1 回のデータベース ラウンドトリップですべてのデータを取得し、この計算された価格列でも並べ替えできるようにすることです。

今、私は次のようなものを持っています:

var products = (from p in Products select p);
if(searchOption)
   products = products.Where(product => product.Name.Contains(searchOption));
products = products.OrderByDescending(product => product.Name);
products = products.Skip(pageNr * pageSize).Take(pageSize);

もちろん、Product クラスのすべてのプロパティを使用できますが、たとえば、Product.CalculatedPrice などの新しい仮想/計算プロパティも使用できるようにしたいと考えています。

少しはこんな感じになればいいな、という感じです。

(from p in Products
select new {
    productId = p.ProductId,
    name = p.Name,
    calculatedPrice = CalculatedValueFromStoredProcedure/OrScalarFunction(p.ProductId, loggedInCustomerId)
});

よろしく、 Tys

4

2 に答える 2

1

.Select()を使用すると、動的タイプを作成できます。このタイプでは、計算された価格で製品を拡張できます。

    products.Select(i => new { Product = i, CalculatedPrice = 100})   

または最初の行:

    var products = (from p in Products select new { Product = p, CalculatedPrice = 100 }); 
于 2011-08-16T11:59:57.947 に答える
1

さらに調査を行った結果、やりたいことが Telerik OpenAccess ORM と組み合わせて使用​​できないことがわかりました。そのため、必要な値を事前に計算し、それらをテーブルに入れ、選択内容をそのテーブルの内容と結合する回避策を作成しました。今のところ、それが私が見つけた最善の解決策です。

于 2011-08-20T17:15:55.697 に答える