1

これは私の最初の質問であり、Linqでの最初の日なので、理解するのが少し難しい日です。データベースからいくつかのレコードをフェッチしたい

すなわち

select * from tblDepartment 
where department_id in 
(
   select department_id from tblMap 
   where Guest_Id = @GuestId
)

2つのDataTableを取得しました。すなわちtblDepartment、tblMap

次に、この結果をフェッチして、3番目のDataTableに保存します。

これどうやってするの。

グーグルした後、これまでこのクエリを作成することができました。

var query = from myrow in _dtDepartment.AsEnumerable()
            where myrow.Field<int>("Department_Id") == _departmentId
            select myrow;

Linq主にDataTablesとのために学ぶためのリンクを教えてくださいDataSets

編集:

私はここに非常によく似た例を持っていますが、それがどのように機能しているかをまだ理解できません。その上にトーチを置いてください。

私はすでにデータベースからデータをフェッチしていて、すでにデータがあるときにリクエストを再度送信したくないので、これを実行したいと思います。しかし、条件に基づいてそのデータをフィルタリングしたいと思います。

4

1 に答える 1

2

あなたが試みているのは、実際のLINQ-To-SQLではありません。これはよくある誤解です。LINQ-To-SQL では、単純な方法でいくつかのテーブルをエンティティにマップし、実行時に LINQ クエリがフレームワークによって SQL によって変換され、定義済みの厳密に型指定されたエンティティ オブジェクトとして返されます。(私は「エンティティ」を説明的な用語として使用します。Entity Framework とは関係ありません。) LINQ-To-SQL は、 ADO.NETの代わりに行うものです。

あなたがしているのは、私がよく使用する「LINQ-To-Dataset」と呼ばれることが多い LINQ-to-object のフレーバーです。拡張メソッドは、非常に便利なオブジェクトで.AsEnumerable()DataTable の DataRows を返します。IEnumerable<DataRow>ただし、LINQ-To-DataTable を使用すると、(A) 厳密に型指定されたオブジェクトがないか、(B)厳密に型指定されたオブジェクトにデータを自分で配置する責任を負います。 いつものようにADO.NET を使用した後、LINQ-to-DataTable は、データを消費しているものは何でもADO.NET DataTables からデータを取得し、別のものにデータを取得するための優れた方法です。

上記の LINQ クエリは、DB に対して既に実行されている DataTable を取得し、IEnumerable<DataRow>素晴らしい を返します。行う:

LINQ ステートメントの後に、次の操作を行います。

For Each DataRow in query
    //Do your stuff
Next

この時点で特に DataTable オブジェクトが本当に必要な場合は、これをチェックしてください。しかし、本当に DataTable が必要ですか?

そして、LINQ に関する本当に素晴らしい本を提案しなければなりません。リンクロック。学ぶ必要のあることが多すぎるように思われる .NET の世界では、時間をかけて LINQ を真に理解する価値があります。取得: LINQ In Action

于 2010-05-21T14:03:34.867 に答える