AsEnumerableについて

タグの編集
投稿者 唯香  (社会人) 投稿日時 2009/5/20 00:07:34
いつも参考にさせていただいております。
初めて投稿させていただきます。

DataTableのデータを簡単に抽出するために
Linqという技術が使えるのでは?と調べておりましたところ
こちら↓の4-3がとても参考になるとコピペしました。
http://homepage1.nifty.com/rucio/VBLINQ/LINQ01.htm

するとcustomers.AsEnumerableでエラーになりました。
('AsEnumerable' は 'System.Data.DataTable' のメンバではありません。)

なにか参照が足りないようなのでと調べたところ
こちら↓の記事と同じ現象が起こっているようですが
http://blogs.msdn.com/vbteamjp/archive/2008/07/03/aspx-linq-to-dataset-jonathan-aneja.aspx
具体的にどうすればいいのかがわかりません。

System.Data.DatasetExtensionsをインポートした覚えはありませんし
System.Dataなら[インポートされた名前空間]にてチェックを付けています。

何かお気づきの点などございましたらご教授いただけると幸いです。
XPPro/VB2008
投稿者 ヴァン  (社会人) 投稿日時 2009/5/20 18:15:00
こんにちは。

WEBアプリですか?
もう少し情報(ソース等)が欲しいですね。
投稿者 るしぇ  (社会人) 投稿日時 2009/5/20 19:19:53
[DataTableExtensions.AsEnumerable メソッド]
http://msdn.microsoft.com/ja-jp/library/system.data.datatableextensions.asenumerable.aspx
> アセンブリ :  System.Data.DataSetExtensions (System.Data.DataSetExtensions.dll 内)

[DataTable クラス]
http://msdn.microsoft.com/ja-jp/library/system.data.datatable.aspx
> アセンブリ :  System.Data (System.Data.dll 内)

名前空間は同じでも参照しているライブラリが違いますね。
System.Data.dll は参照してるけど
System.Data.DataSetExtensions.dll は参照してないということでは?
投稿者 唯香  (社会人) 投稿日時 2009/5/20 19:31:39
ヴァン様お返事ありがとうございます。

> WEBアプリですか?
> もう少し情報(ソース等)が欲しいですね。
当方はWindowsアプリを作成しております。
ソースは先の投稿の4-3そのままでございます。
もちろんNorthwindのデータがありませんので
実行すればエラーになることは当たり前なのですが
実行前からAsEnumerableに波線が引かれてエラーとなります。
(エラー内容は先の投稿に記載させていただいています)

ところが新規プロジェクトだとエラーにならないことが判明しまして
[インポートされた名前空間]に挙がっているものが何か問題なのかな?と思います。

さらに調べてみるとAsEnumerableを使わずに
このような↓感じでできました。
Dim arrName = From row As DataRow In tbl.Rows _
              Where row("コード") = strCode _
              Select row("名称")
*4-3のソースで得られる結果と違うかどうかも分かりません。

原因は不明ですがとりあえず解決とさせていただきます。
ヴァン様をはじめ閲覧いただいた皆様ありがとうございました。
投稿者 唯香  (社会人) 投稿日時 2009/5/20 19:45:36
るしぇ様お返事ありがとうございます。

> 名前空間は同じでも参照しているライブラリが違いますね。
> System.Data.dll は参照してるけど
> System.Data.DataSetExtensions.dll は参照してないということでは?
先の同じ現象のエラーが書かれたサイトに
'インポートを "System.Data.DataSetExtensions" ではなく、"System.Data" に変更すればよいのです'
ととあったのでSystem.Data.DataSetExtensionsは
参照してはいけないと思っていたのですが
ご指摘どおり参照してみたところエラーの波線が消えました。

るしぇ様どうもありがとうございました。
とても感謝しております。
投稿者 るしぇ  (社会人) 投稿日時 2009/5/20 19:48:39
> System.Data.DatasetExtensionsをインポートした覚えはありませんし
[Imports ステートメント]
http://msdn.microsoft.com/ja-jp/library/7f38zh8x.aspx
この場合のインポートは実質、名前空間を省略できるだけで、
一般的にそう表現されている、ファイルのデータを読み込む等の
具体的な操作とは関係ないのです。
# 別の名前空間のメンバ(関数など)を自分のメンバの様に
# 使えるから、意味としては合ってるのかもしれないですが。。。

ライブラリを追加するには『参照設定』が必要です。

VBは自分では何もできないので、様々なライブラリ(DLL)
を参照して利用します。Excel を動かすときは Excel の
DLL と Office の DLL 。自作のプロジェクトを他の
プロジェクトから利用する場合も、基本は DLL 参照です。
[第51回 クラスライブラリの作成]
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard51.htm

VB.NET で利用できる機能をまとめた .NetFramework は
たくさんの機能をまとめていますのでファイル(DLL)も複数
あります。最初から全部のファイルを参照していれば、
参照関係のエラーは回避できるかもしれませんが、
あまりにもたくさんあるので巨大な実行ファイルに
なってしまいます。

このため、必要なファイル(DLL)のみ参照して利用します。
新規プロジェクトとして開く時に、プロジェクトの種類を
いくつか選べる(Windows フォームアプリケーションとか)
と思いますが、実は、ここで変わるのは、参照する DLL
だと言っても良いです。

これがテンプレートになっており、通常はそのまま
プログラムしても問題ないのですが、拡張機能などを
利用したい場合は、その機能がプログラムされたファイル
(DLL)を追加してやらないといけません。

参照設定を確認してみてください。
投稿者 るしぇ  (社会人) 投稿日時 2009/5/20 19:54:51
レスが前後しました。
参照についてはある程度ご存知のようですね。
参照とインポートが全く違うものなので、その辺りを
知識をつけましょう。
投稿者 daive  (社会人) 投稿日時 2009/5/21 01:34:34
MS-SQLのサンプル、サンプルデータベースは、以下を参照してみてください。
http://code.msdn.microsoft.com/SQLServerSamples#monolith

昔は、2000系のサンプルデータも有ったのですが、
トップからは消えているようです。

便利ツールは、この辺から
http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx
投稿者 daive  (社会人) 投稿日時 2009/5/21 01:38:28
追補
SQL2000.Sample.Databases.(Northwind,pubs).zip 
http://code.msdn.microsoft.com/northwind/Release/ProjectReleases.aspx?ReleaseId=1401

Northwind Community Edition 
http://www.codeplex.com/NorthwindCommunity/