2017-06-26 13 views
0

DataGridViewに表示するためにDataTableのSQLテーブルにデータを要約したいと思います。私はテーブルを照会するためにLINQを使用したいと思います。DataTableに対する動的LINQクエリ

このSQLクエリは、要約を生成します。

;WITH CTE AS (
SELECT * FROM vw_Trades WHERE NOT (dtExpDate < GETDATE()) 
) 
SELECT szSymbol, dtFwdDate, sum(fQuantity) 
FROM CTE GROUP BY szSymbol, dtFwdDate 
HAVING SUM(fQuantity) <> 0 
ORDER BY szSymbol, dtFwdDate 
GO 

私はSystem.Linq.Dynamicパッケージを使用しようとしましたが、時代遅れであるように思われます。 System.Linq.Dynamic.Coreパッケージを試しましたが、ドキュメントを見つけることができません。このキャッチは、コンパイル時に、SELECT文にどのフィールドが入るのかわからないため、型付きLINQクエリを使用できなくなります。

私は動的SQLを使用できますが、LINQを使用する必要がありました。まともな図書館がありますか?それとも、SQLを使い続ける方がいいですか?

+0

私はあなたの質問に「動的」なものは何も表示されません。あなたは「ダイナミック」なのですか? –

+0

DataTableで作業する必要がある場合は、ADO.NETとSQLを使用することをお勧めします。 –

+0

申し訳ありませんが、明確にするために、列szSymbol、dtFwdDate、およびSUM(fQuantity)は、ユーザーの入力によって異なる場合があります。したがって、szSymbolとSUM(fQuantity)または異なるフィールドだけが必要な場合があります。 –

答えて

0

なぜCTEが必要かわかりません。 - DataTable(inを使用する必要はありません

from t in vw_Trades 
where dtExpDate >= DateTime.Now 
group by new { szSymbol, dtFwdDate } into g 
select new {szSymbol, dtFwdDate, quantity = g.Sum(i => i.fQuantity) } 
where quantity <> 0 

クエリから直接DataGridViewを調達することができます注:ちょうど

SELECT szSymbol, dtFwdDate, sum(fQuantity) 
FROM vw_Trades 
WHERE NOT (dtExpDate < GETDATE()) 
GROUP BY szSymbol, dtFwdDate 
HAVING SUM(fQuantity) <> 0 
ORDER BY szSymbol, dtFwdDate 

LINQのと同等のようなものになるだろうと、あなたはそのSQLを表現することができます事実、それはもっと複雑になります)。

+0

申し訳ありませんが、私は明確にする必要があります。トレードテーブルには22のフィールドがあります。ここでのクエリは3つを選択します。ユーザーは3〜22のフィールドを選択することができます。あなたは正しいですが、私はCTEは必要ありません。それは他の理由でそこにありました。 –

+0

OKですので、返される列を動的に選択したいですか? –

関連する問題