2

目標

C#.NET + MVC 4 + Entity Framework + MySQL を使用するアプリケーションでカスタム¹ クエリを作成します。

問題

クエリを実行して結果を表示したいのですが、方法がわかりません。

私が持っているもの

productName一部の , minProductprice,を返す次のクエリmaxProductPrice (これを自分のビューに表示したい) :

SELECT MIN(`map`.`Product_Price`) as `minProductPrice`,
       MAX(`map`.`Product_Price`) as `maxProductPrice`,
       `pr`.`Product_Name` as `productName`
FROM `bm_market_products` `map` join
     `bm_products` as `pr`
     on map`.`Product_Id` = `pr`.`Product_Id`
group by `map`.`Product_Id`

質問が重複していますか?

ないと思います。この質問を見つけて似たようなタイトルですが、文脈が違うようです。

質問

では、どうすれば問題を追跡できますか?

詳細

¹: 「カスタム」とは、Entity Framework によって作成された既定の CRUD 以外のものを意味します。前に示したクエリは、デフォルトでは実行されませんでした — そして実行したいと思います。

前もって感謝します!

4

3 に答える 3

0

Brian Sの助けを借りて、より簡潔な方法はストアド プロシージャを使用することであると結論付けることができました。私は初心者であり、MySQL Documentation の「Using Store Routines」投稿で解決策を見つけました。

ところで、助けてくれてありがとう。

更新 v1

Coskun Sunaliによる「Entity Framework と MySQL ストアド プロシージャを使用した MySQL のクエリ」は、EF + ストアド プロシージャを操作するための優れた方法を教える投稿です。初心者の私にとって、素晴らしい解決策でした!

于 2013-06-10T16:08:06.217 に答える
0

エンティティ フレームワークが「動的クエリ」を認識するようになったため、SqlDataAdapter と DataSet を使用できません。その後、必要な場所にそれらを表示できます。

それが役に立てば幸い。

于 2013-06-10T14:26:24.720 に答える
0

私は(SQLを直接実行するために派生した)のExecuteStoreQueryメソッドを使用しています。これが最善のアプローチであるかどうかはわかりませんが、多くの検索を行った結果、私が見つけることができる最良のアプローチでした:ObjectContextDbContext

public class ResultObject
{
    public string ProductName { get; set; }
    public decimal MinProductPrice { get; set; }
    public decimal MaxProductPrice { get; set; }
}

//Within your Control or somewhere common
public IList<TResult> ExecuteSql<TResult>(string sql)
{
    var results = ((IObjectContextAdapter)DbContext).ObjectContext.ExecuteStoreQuery<TResult>(sql);
    return results;
}

//Then, when you need the results, call the ExecuteSql method:
var productInfo = ExecuteSql<ResultObject>(mySql);

ユーザー入力データのスクラブを含む inline-sql に関するすべての標準的な警告と、それがどのように悪い考えであるかが適用されます (おそらくストアド プロシージャを検討する必要があります)。ExecuteStoreQuery必要に応じてメソッドにパラメーター コレクションを渡すことができるため、これはストアド プロシージャでも機能します。

于 2013-06-10T14:27:48.720 に答える