C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: LINQ to SQL:ExecuteQueryの型を可変に


(過去ログ 86 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■51116 / inTopicNo.1)  LINQ to SQL:ExecuteQueryの型を可変に
  
□投稿者/ ケント (6回)-(2010/06/25(Fri) 12:57:17)

分類:[C#] 

.NET Framework 3.5 SP1 です。

LINQ to SQL のExecuteQueryを用いて、SQL文を直接実行します。
SQL文は String.Format("SELECT * FROM {0}", table_name) といったようなものです。
つまり、テーブル可変でデータ一覧を取得したいわけです。

しかし、ExecuteQueryは返却される値を入れるオブジェクトの型を指定する必要があります。
今回のケースでは型(プロパティ定義)を特定することができませんので、型が指定できません。
# ためしにObject型で受け取ってみましたが、レコード件数以上の情報を得ることはできませんでした

このような場合、どういった方法で対処すればよいでしょうか?
引用返信 編集キー/
■51119 / inTopicNo.2)  Re[1]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ 渋木宏明(ひどり) (1377回)-(2010/06/25(Fri) 14:43:32)
渋木宏明(ひどり) さんの Web サイト
> LINQ to SQL のExecuteQueryを用いて、SQL文を直接実行します。

その時点で LINQ を使う意義が著しく失われているような (^^;

> SQL文は String.Format("SELECT * FROM {0}", table_name) といったようなものです。
> つまり、テーブル可変でデータ一覧を取得したいわけです。

実行時にクエリの対象となるテーブルを指定するとして、テーブルのスキーマは一定ですか?

また、クエリの結果は IQueryable<T> でなければなりませんか? あるいは IEnumerable でもいいのでしょうか?
引用返信 編集キー/
■51120 / inTopicNo.3)  Re[2]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ 渋木宏明(ひどり) (1378回)-(2010/06/25(Fri) 14:44:23)
渋木宏明(ひどり) さんの Web サイト
> また、クエリの結果は IQueryable<T> でなければなりませんか? あるいは IEnumerable でもいいのでしょうか?

IEnumerable でいいなら、LINQ なんか使わないで DataReader で読み出した結果を匿名型にでも詰めて返せばおkな気が。
引用返信 編集キー/
■51153 / inTopicNo.4)  Re[3]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ ケント (7回)-(2010/06/25(Fri) 21:03:05)
渋木宏明(ひどり) さん。返信ありがとうございます。

LINQ to SQLを使う意義がゼロであるという指摘はその通りだと思います。
それでもLINQを使いたい理由は、同じアプリケーションの他の部分は全てLINQ to SQLで問題ないためです。
一か所のみADO.NETなど、他のDB接続を使うのに抵抗感があったもので。
DB接続の統一という意味以外はありません。

>また、クエリの結果は IQueryable<T> でなければなりませんか? あるいは IEnumerable でもいいのでしょうか?

クエリ結果として受け取るのは、IQueryable<T>である必要はありません。
テーブルによってカラム定義が全く違うので<T>を指定できないという問題なので、
データさえ取れればなんでもかまいません。
Dictionary<string, string>辺りで取得できるのが理想ですが、拘りません。



引用返信 編集キー/
■51156 / inTopicNo.5)  Re[4]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ 渋木宏明 (2回)-(2010/06/25(Fri) 22:06:58)
渋木宏明 さんの Web サイト
> テーブルによってカラム定義が全く違うので<T>を指定できないという問題なので、
> データさえ取れればなんでもかまいません。

だと、いよいよ LINQ と相性悪いですね。

データ接続だけ借りて、DataReader で手回しで読み取った方が簡単な気が。(すでにそれに近いとこまで行ってますが)

引用返信 編集キー/
■51173 / inTopicNo.6)  Re[5]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ 渋木宏明 (3回)-(2010/06/26(Sat) 12:17:27)
渋木宏明 さんの Web サイト
> データ接続だけ借りて、DataReader で手回しで読み取った方が簡単な気が。(すでにそれに近いとこまで行ってますが)

やっぱり ExecuteQuery() の結果をどうこうする方向は見込み薄そーです。
(静的な型の定義が必要なので)

なので、DataContext.Connection から、CreateCommand() → Command.ExecuteReader() で DataReader を得て、それを手回しして結果を回収するのが現実解な気がします。
引用返信 編集キー/
■51236 / inTopicNo.7)  Re[6]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ ケント (8回)-(2010/06/28(Mon) 19:59:46)
渋木宏明さん。アドバイスありがとうございます。

現在別件のためテストできていませんが、アドバイスに従ってテストしてみます。
引用返信 編集キー/
■51239 / inTopicNo.8)  Re[6]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ 渋木宏明 (6回)-(2010/06/28(Mon) 23:03:15)
渋木宏明 さんの Web サイト
> やっぱり ExecuteQuery() の結果をどうこうする方向は見込み薄そーです。
> (静的な型の定義が必要なので)

暗黙型でもいいので、コンパイル時に型が確定するような運用なら、LINQ の Select などを参考にしてどーにかできそうな気もしますが、結構手間がかかりそーな予感です。

引用返信 編集キー/
■51568 / inTopicNo.9)  Re[6]: LINQ to SQL:ExecuteQueryの型を可変に
□投稿者/ ケント (9回)-(2010/07/09(Fri) 15:05:08)
渋木宏明さん。

お礼が遅くなりました。
色々とアドバイスありがとうございました。
アドバイスの方法で実装することができました。

■No51173 (渋木宏明 さん) に返信
> なので、DataContext.Connection から、CreateCommand() → Command.ExecuteReader() で DataReader を得て、それを手回しして結果を回収するのが現実解な気がします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -