2012-02-10 3 views
1

こんにちは。私はSQLよりもLINQクエリに変換されています。 私が望むすべては、リストから最大数(FA-00001、FA-00059)SQLをLINQクエリに変換して最大値を取得する

SELECT MAX(CAST(SUBSTRING(ReferenceId, PATINDEX('%-%', ReferenceId) + 1, LEN(ReferenceId) - PATINDEX('%-%', ReferenceId)) AS int)) AS MaxReferenceId FROM [ClientRC].[dbo].[EHO_Action] 

これは、LINQに変換することが可能であるを持っているのですか?おかげ

答えて

0

匿名の投影を使用して別のアプローチ:

var y = (from record in 
       (from record in db.ClientRC 
       select new 
       { 
        Group = "x", 
        ReferenceNumber = Convert.ToInt32(record.ReferenceId.Split('-')[1]) 
       }) 
      group record by new { record.Group } into g 
      select new 
      { 
       MaxReferenceId = g.Max(p => p.ReferenceNumber) 
      }); 
+0

whoaaa高レベルですが、それは良いパフォーマンスが賢明ではないと思いますか?私は内側のクエリを見ることができます... :) –

+0

これはおそらくケースです - 私はテストしていない。私はちょうどあなたに匹敵するものとして、読みやすく、より高いレベルの例を提供したかったのです。 – Nick

+0

ところでありがとう...私はこのLINQの世界では新しいので、もっと知ることはうれしいです。 –

0

http://msdn.microsoft.com/en-us/library/bb386972.aspx

var myvar = (from v in db.object where v!=null select v.id).Max(); 

MSDNは、このようなもののために多くの例があります。

エンティティフレームワークを使用している場合は、datacontextに対してクエリを直接実行できます。クエリをパラメータ化し、ユーザ入力を直接パラメータに取り込まないパラメータを使って何かをしているかどうかを確認してください。 http://msdn.microsoft.com/en-us/library/ee358769.aspx

+0

私のコラムは、その文字列の整数ではないと私は必要00001からFA-またはEHO-を切り取り、max ...をチェックし、例えば59の数字だけを返します。私の説明は意味をなさないでしょうか?ありがとう –

+0

私は、EFを使用していますか?もしそうなら、上記のようなクエリをデータコンテキストに対して直接実行することができます。私は私の答えを編集しました。 –

+0

いいえ、私はcodesmithだけを使用しています。 –

0

はこれを試してみてください。..

var list = DBContext.EHO_Action 
        .Where(x => x.YourListColumn != null) 
        .Select(x => x.YourListColumn).ToList(); // Take the list (FA-00001 ,FA-00059) from db to a list 

var maxNo = list.Max(x => Convert.ToInt32(x.Split('-')[1])); 

あなたのLINQのコンテキストに応じて、コンテキスト名とカラム名を変更してください。

あなたはこのようにそれを行うことができ、SQLを使用したい場合は...

var list = DBContext.ExecuteQuery<string>("select yourreqrdcolumn from [ClientRC].[dbo].[EHO_Action]"); 
+0

私はちょうど同じ解決策を考えていたが、最適化されないと思ったのは、SQLから直接最大数を取るほうがいいのではないだろうか? –

+0

はい、それは良いアイデアだと思うが、直接あなたのSQLのintまたは類似のデータ型に直接何かに取り組んでいる場合のみ。しかし、linq-tosqlを使用して文字列を変換または解析するようなストリング操作を直接行いたい場合は、フォーマット変換エラーが発生します。だから、私はそれをリストに入れて、ドットネットの文字列操作を使っています。それはあなたの好みです。 – Flowerking

+0

ありがとうございますが、列がnullの場合は例外がありますか? と、DBContext.Executequeryからこの同じSQLクエリを実行して、パラメータを送信せずにスカラー値を取得するにはどうすればよいですか? –

関連する問題