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

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

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

Re[16]: LINQ to SQL


(過去ログ 86 を表示中)

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

■51085 / inTopicNo.1)  LINQ to SQL
  
□投稿者/ asami (2回)-(2010/06/24(Thu) 16:07:32)

分類:[.NET 全般] 

C#超初心者です。よろしくおねがいします。

LINQ to SQL の DataContext をつかってSQLServerから取得したデータを
DataTableにする方法はありますか?

取得したデータを以下のクラスにいれて返却(シリアライズ)したいのです。

public class retClass
{
private int code; //エラーコード
private System.Data.DataTable retTable; // テーブルデータ
  }

どうかアドバイスいただけますでしょうか。
引用返信 編集キー/
■51086 / inTopicNo.2)  Re[1]: LINQ to SQL
□投稿者/ 中博俊 (1425回)-(2010/06/24(Thu) 16:54:25)
自分でデータを突っ込めばいけます。
引用返信 編集キー/
■51087 / inTopicNo.3)  Re[2]: LINQ to SQL
□投稿者/ asami (4回)-(2010/06/24(Thu) 17:11:22)
No51086 (中博俊 さん) に返信
> 自分でデータを突っ込めばいけます。

ありがとうございます。
処理は面倒な感じでしょうか?

ヘルプには「LINQ to SQL を使用してデータベースに対するクエリを実行し、その結果を DataSet に読み込める」
しか書かれなくてショックです・・


引用返信 編集キー/
■51089 / inTopicNo.4)  Re[3]: LINQ to SQL
□投稿者/ マサヤ (46回)-(2010/06/24(Thu) 17:57:35)
http://msdn.microsoft.com/ja-jp/library/bb425822.aspx
を参照ください。

エンティティクラスを定義します。
クエリ結果を上記URLでよく書かれているforeachのとこでエンティティに突っ込みます。

面倒ではないと思います。
LINQに限らず、よくあるパターンですし。

引用返信 編集キー/
■51093 / inTopicNo.5)  Re[4]: LINQ to SQL
□投稿者/ asami (5回)-(2010/06/24(Thu) 19:09:11)
No51089 (マサヤ さん) に返信
> http://msdn.microsoft.com/ja-jp/library/bb425822.aspx
> を参照ください。
>
> エンティティクラスを定義します。
> クエリ結果を上記URLでよく書かれているforeachのとこでエンティティに突っ込みます。
>
> 面倒ではないと思います。
> LINQに限らず、よくあるパターンですし。
>

ありがとうございます。調べてやってみます!

どうしてもわからなかったらもう一度質問させてください。
アドバイスありがとうございました。

引用返信 編集キー/
■51101 / inTopicNo.6)  Re[5]: LINQ to SQL
□投稿者/ asami (7回)-(2010/06/24(Thu) 20:58:13)

> ありがとうございます。調べてやってみます!
>
> どうしてもわからなかったらもう一度質問させてください。
> アドバイスありがとうございました。
>

やはりDataSetへの突っ込みかたがわかりません・・
引用返信 編集キー/
■51112 / inTopicNo.7)  Re[6]: LINQ to SQL
□投稿者/ マサヤ (47回)-(2010/06/25(Fri) 10:18:14)
No51101 (asami さん) に返信
>
>>ありがとうございます。調べてやってみます!
>>
>>どうしてもわからなかったらもう一度質問させてください。
>>アドバイスありがとうございました。
>>
>
> やはりDataSetへの突っ込みかたがわかりません・・

DataTableですよね?
引用返信 編集キー/
■51114 / inTopicNo.8)  Re[7]: LINQ to SQL
□投稿者/ asami (8回)-(2010/06/25(Fri) 12:34:51)
No51112 (マサヤ さん) に返信
> DataTableですよね?
はい。失礼しました。DataTableでした。。。
引用返信 編集キー/
■51115 / inTopicNo.9)  Re[8]: LINQ to SQL
□投稿者/ マサヤ (48回)-(2010/06/25(Fri) 12:53:45)
>LINQ to SQL の DataContext をつかってSQLServerから取得したデータを
>DataTableにする方法はありますか?
まず、Linqのクエリ式でクエリ結果は取得できてますか?

>public class retClass
参照URLにもございますが、これ以外にDataTable用にクラスを用意いたしましたでしょうか?

引用返信 編集キー/
■51135 / inTopicNo.10)  Re[9]: LINQ to SQL
□投稿者/ asami (9回)-(2010/06/25(Fri) 17:28:03)
No51115 (マサヤ さん) に返信
> >LINQ to SQL の DataContext をつかってSQLServerから取得したデータを
> >DataTableにする方法はありますか?
> まず、Linqのクエリ式でクエリ結果は取得できてますか?
はい。エンティティクラスの配列で取得できています。

> >public class retClass
> 参照URLにもございますが、これ以外にDataTable用にクラスを用意いたしましたでしょうか?
エンティティクラスがあります。

数日前から始めたので調べているのですがわからないことばかりで。。。
アドバイスいただけますでしょうか。よろしくお願いします。
引用返信 編集キー/
■51137 / inTopicNo.11)  Re[10]: LINQ to SQL
□投稿者/ マサヤ (50回)-(2010/06/25(Fri) 17:36:04)
>エンティティクラスがあります。
エンティティクラスを記述していただいてよろしいでしょうか?
もしかしたらTable属性ではなかったりしませんか?
List用のクラスな予感がします。
引用返信 編集キー/
■51139 / inTopicNo.12)  Re[11]: LINQ to SQL
□投稿者/ asami (10回)-(2010/06/25(Fri) 17:43:58)
No51137 (マサヤ さん) に返信
> >エンティティクラスがあります。
> エンティティクラスを記述していただいてよろしいでしょうか?
> もしかしたらTable属性ではなかったりしませんか?
> List用のクラスな予感がします。

お忙しいところありがとうございます。
ORデザイナーというもので自動的に作られたクラスがありますが
これではまずいでしょうか。
引用返信 編集キー/
■51140 / inTopicNo.13)  Re[12]: LINQ to SQL
□投稿者/ マサヤ (52回)-(2010/06/25(Fri) 17:49:51)
> お忙しいところありがとうございます。
> ORデザイナーというもので自動的に作られたクラスがありますが
> これではまずいでしょうか。
すみません、自分の勉強不足でORデザイナーがわかりません。
業務の内容に抵触しない形でエンティティクラスを記述いただけたらと思いました。

まことに失礼な質問で申し訳ありませんが、インデクサ、アクセサという言葉をご存知でしょうか?
引用返信 編集キー/
■51142 / inTopicNo.14)  Re[13]: LINQ to SQL
□投稿者/ asami (11回)-(2010/06/25(Fri) 17:54:50)
No51140 (マサヤ さん) に返信
>>お忙しいところありがとうございます。
>>ORデザイナーというもので自動的に作られたクラスがありますが
>>これではまずいでしょうか。
> すみません、自分の勉強不足でORデザイナーがわかりません。
> 業務の内容に抵触しない形でエンティティクラスを記述いただけたらと思いました。
>
> まことに失礼な質問で申し訳ありませんが、インデクサ、アクセサという言葉をご存知でしょうか?

ありがとうございます。
いま調べてみて理解しました。多言語の経験はあります。よろしくお願いします。

引用返信 編集キー/
■51144 / inTopicNo.15)  Re[14]: LINQ to SQL
□投稿者/ asami (12回)-(2010/06/25(Fri) 17:57:26)
No51142 (asami さん) に返信
> ■No51140 (マサヤ さん) に返信
>>すみません、自分の勉強不足でORデザイナーがわかりません。
>>業務の内容に抵触しない形でエンティティクラスを記述いただけたらと思いました。
dbmlファイルがありましてエンティティ図みたいのが描かれていて
クラスが自動生成されるようです。(自分が操作したわけではないです)
でカラムがメンバ変数になってる感じです。

引用返信 編集キー/
■51147 / inTopicNo.16)  Re[14]: LINQ to SQL
□投稿者/ マサヤ (53回)-(2010/06/25(Fri) 18:05:29)
エンティティクラスはTable属性になっておりますでしょうか?

もしなっておりましたら、objectにDataTable型でクエリ結果が格納されております。
ですので、本題の
public class retClass
{
  private int code; //エラーコード
  private System.Data.DataTable retTable; // テーブルデータ
}
に話が移ります。

よくある格納方法(自分だけ?)
IList retList = new System.Collection.ArrayList();
foreach(エンティティクラスの型 tempTable in クエリ結果オブジェクト)
{
retClass ret = new retClass();
ret.code = エラーコード?;
ret.retTable = temp.tempTable;
 retList.Add(ret);
}

return retList;
これでIListが返り値として戻ります。
引用返信 編集キー/
■51151 / inTopicNo.17)  Re[15]: LINQ to SQL
□投稿者/ asami (13回)-(2010/06/25(Fri) 19:02:35)
No51147 (マサヤ さん) に返信
> エンティティクラスはTable属性になっておりますでしょうか?
>
> もしなっておりましたら、objectにDataTable型でクエリ結果が格納されております。
> ですので、本題の
> public class retClass
> {
>   private int code; //エラーコード
>   private System.Data.DataTable retTable; // テーブルデータ
> }
> に話が移ります。
>

何度もありがとうございます。Table属性というのはJobテーブルを返す
メソッドがあるか?ということでしょうか。
こういうのは定義されています。
public System.Data.Linq.Table<Job> Job
{
get
{
return this.GetTable<Job>();
}
}

これに対してクエリで抽出し、エンティティ型の配列を返してきている感じです。
でこの配列をDataTableにいれたいと考えています。


引用返信 編集キー/
■51231 / inTopicNo.18)  Re[15]: LINQ to SQL
□投稿者/ マサヤ (56回)-(2010/06/28(Mon) 17:13:29)
>public System.Data.Linq.Table<Job> Job
>{
>get
>{
?return this.GetTable<Job>();
>}
>}
>これに対してクエリで抽出し、エンティティ型の配列を返してきている感じです。
>でこの配列をDataTableにいれたいと考えています。

Linqのクエリ結果がJobの中に入っているんですよね?
for(int i=0;i< Job.Count;i++)
{
string test = Job[i].テーブル要素1.ToString();
}
こんな感じで中身を取得できませんか?
できたら、ここでSystem.Data.DataTableのインスタンスを作成してDataTableに中身を入れてください。
その後に、
public class retClass
{
private int code; //エラーコード
private System.Data.DataTable retTable; // テーブルデータ
  }
このリストにエラーコードとともにDataTableを入れればよくないでしょうか?


あと、
public System.Data.Linq.Table<Job> Job
{
get
{
return this.GetTable<Job>();
}
}
は、
どこかでJobクラスの定義がないでしょうか?
引用返信 編集キー/
■51233 / inTopicNo.19)  Re[16]: LINQ to SQL
□投稿者/ asami (16回)-(2010/06/28(Mon) 19:13:46)
2010/06/28(Mon) 19:15:37 編集(投稿者)
2010/06/28(Mon) 19:14:51 編集(投稿者)

<pre><pre>■No51231 (マサヤ さん) に返信
何度もありがとうございます。

以下のように拡張メソッドCreateDataTableを作成して
なんとか読み込ませることができました。

NorthwindDataContext db = new NorthwindDataContext(ConnectionString);

var qer =
    from job in context.Job
        job.Name == "airForce"
    select new
    {
        job.ID
        job.Name
    };

DataSet ds = new DataSet("NewDataSet");
ds.tables.Add(qer.CreateDataTable("Jobs"));


----拡張メソッド----------------------------------------
        public static DataTable CreateDataTable<T>(
            this IEnumerable<T> query,
            string tableName)
        {
            DataTable table = new DataTable(tableName);
            var fields = typeof(T).GetProperties();

            foreach (var field in fields)
            {
                DataColumn column = new DataColumn(field.Name);
                table.Columns.Add(column);
            }

            foreach (var row in query)
            {
                object[] values = new object[fields.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = fields[i].GetValue(row, null);
                }
                table.Rows.Add(values);
            }
            return table;
        }
----ここまで----------------------------------------

親切なアドバイスを何度もいただき本当にありがとうございました。
また質問させていただくかと思いますが、またアドバイスいただけたら嬉しいです。
</pre></pre>

引用返信 編集キー/
■51234 / inTopicNo.20)  Re[16]: LINQ to SQL
 
□投稿者/ asami (17回)-(2010/06/28(Mon) 19:40:10)
No51231 (マサヤ さん) に返信
何度もありがとうございます。

以下のように拡張メソッドCreateDataTableを作成して
なんとか読み込ませることができました。

NorthwindDataContext db = new NorthwindDataContext(ConnectionString);

var qer =
from job in context.Job
job.Name == "airForce"
select new
{
job.ID
job.Name
};

DataSet ds = new DataSet("NewDataSet");
ds.tables.Add(qer.CreateDataTable("Jobs"));


----拡張メソッド----------------------------------------
public static DataTable CreateDataTable<T>(
this IEnumerable<T> query,
string tableName)
{
DataTable table = new DataTable(tableName);
var fields = typeof(T).GetProperties();

foreach (var field in fields)
{
DataColumn column = new DataColumn(field.Name);
table.Columns.Add(column);
}

foreach (var row in query)
{
object[] values = new object[fields.Length];
for (int i = 0; i < values.Length; i++)
{
values[i] = fields[i].GetValue(row, null);
}
table.Rows.Add(values);
}
return table;
}
----ここまで----------------------------------------

親切なアドバイスを何度もいただき本当にありがとうございました。
また質問させていただくかと思いますが、またアドバイスいただけたら嬉しいです。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -