質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

3回答

16742閲覧

【C#】【Datatable】データテーブルにクエリを投げて結果を取得する方法

trtl21

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

1クリップ

投稿2016/07/02 17:26

データテーブルにクエリを投げて結果を取得する方法はありますか?

例)
No LastName MathersLastName BirthPlace MathersBirthPlace
1 松本 松本 兵庫 兵庫
2 浜田 浜田 大阪 大阪
3 東野 今田 奈良 滋賀

のようなデータテーブルがあるとして、
このデータテーブルに対して下記のようなSQLを投げて結果を取得できたりしませんか?
SELECT No
,COUNT(CASE WHEN LastNANE != ParentLastName
THEN 1
WHEN BirthPlace != MathersBirthPlace
THEN 1
ELSE 0
END) AS Count

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

SQL 文は使えません。代わりに LINQ to DataSet を使います。

C#

1// DataTable の作成 2var table = new DataTable(); 3table.Columns.AddRange(new DataColumn[] { 4 new DataColumn("No", typeof(int)), 5 new DataColumn("LastName", typeof(string)), 6 new DataColumn("MothersLastName", typeof(string)), 7 new DataColumn("BirthPlace", typeof(string)), 8 new DataColumn("MothersBirthPlace", typeof(string)), 9}); 10table.Rows.Add(1, "松本", "松本", "兵庫", "兵庫"); 11table.Rows.Add(2, "浜田", "浜田", "大阪", "大阪"); 12table.Rows.Add(3, "東野", "今田", "奈良", "滋賀"); 13 14// LINQ 式 15var results = 16 from row in table.AsEnumerable() 17 select new { 18 No = row.Field<int>("No"), 19 Count = row.Field<string>("LastName") == row.Field<string>("MothersLastName") 20 && row.Field<string>("BirthPlace") == row.Field<string>("MothersBirthPlace") 21 ? 1 22 : 0 23 }; 24 25// 出力 26foreach (var result in results) Console.WriteLine(result);

LINQ 式にはもう一つ書き方があります。上記の書き方は下記のサブセットでしかありません。
今回は必要ありませんが、機能をフルに使いたい時には次のように書きます。

C#

1results = table 2 .AsEnumerable() 3 .Select(row => new 4 { 5 No = row.Field<int>("No"), 6 Count = row.Field<string>("LastName") == row.Field<string>("MothersLastName") 7 && row.Field<string>("BirthPlace") == row.Field<string>("MothersBirthPlace") 8 ? 1 9 : 0 10 });

投稿2016/07/02 23:11

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

多分できないと思います

もともとSQLの結果をDataTableにFillして使われることが多いので、その結果に対してSQLでリクエリするというシチュエーションがあまりないのかもしれません
DataTableの絞込みにはDataView > RowFilterが使われることが多いのでしょうか

あと書き方がSQLに近いのはLinqのクエリ構文ですかね
LINQ クエリ式 (C# プログラミング ガイド)
C#使いにはクエリ構文よりメソッド構文の方がウケがイイみたいですが..

投稿2016/07/02 22:36

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

クエリを掲示するだけでなく、
期待する結果を書込みすると、意外な回答が付くかもしれません。
ParentLastName:パラメータなのか?どこかのテーブルの値なのか

例えば、クエリに適さない事をDBに対して行う場合、直ぐに思いつくのは、3種類。
1.C#上で、dojikko さん紹介の方法や、各段階のデータを取得して、ロジックを書く。
2.C#上で、SQL CLR を使った方法で、やっぱりプログラムロジック併用。
3.Management Studio で、transact-sql(VBのMS-SQL方言な感じです)
拡張子:sql ファイルを書いて、必要であればtempテーブルなどを使った処理を書き
最終的に、複合クエリや、ストアド化した処理を書く。

投稿2016/07/02 23:32

編集2016/07/02 23:35
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2016/07/03 00:11

Transact-SQL は VB の方言ではなくて、SQL Server 用の SQL のことですよ。 VB だろうが C# だろうが Python だろうが SQL Server に SQL を投げる時には Transact-SQL を使います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問