1

SQLクエリをLINQに変換しようとしています(2つのSQLテーブルをダウンロードしてメモリ内のDataSetに保存するコードを追加したため)。したがって、LINQ が SQL と同じものを選択する必要があります。

SQL クエリ

SELECT s.item1, s.item2, l.itemA, l.itemB
FROM table1 s, table2 l
WHERE l.itemA = name AND s.item1 = l.itemB

これまでにコンパイルされていないもの (DBConfig は複数のテーブルを持つ DataSet です)

var query = from l in DbConfig.Tables["table2"].AsEnumerable()
            join s in DbConfig.Tables["table1"].AsEnumerable() on l.Field<string>("itemB") equals s.Field<string>("item1")
            where l.Field<string>("itemA") == name
            select s.item, s.item2, l.itemA, l.itemB;

私はLINQに非常に慣れていないので、どんな助けも素晴らしいでしょう、ありがとう!

4

4 に答える 4

2

s.item1厳密に型指定された結果を扱っていないため、たとえば;で結果を選択することはできません。Field<>クエリの残りの部分と同様に、(または同様のものを)使用する必要があります。また、LINQ クエリでは 1 つのオブジェクトしか選択できず、4 つの値が必要なため、新しい匿名型でそれらを選択するか、それらを格納する型を作成する必要があります。

var query = from l in DbConfig.Tables["table2"].AsEnumerable()
            join s in DbConfig.Tables["table1"].AsEnumerable()
              on l.Field<string>("itemB") equals s.Field<string>("item1")
            where l.Field<string>("itemA") == name
            select
      new { Item1 = s.Field<string>("item1"), Item2 = s.Field<string>("item2"),
            ItemA = l.Field<string>("itemA"), ItemB = l.Field<string>("itemB") };
于 2013-08-20T14:19:15.517 に答える
1

これを試してください

var data=from dr1 in DbConfig.Tables["table2"].AsEnumerable()
      join dr2 in DbConfig.Tables["table1"].AsEnumerable()
        on dr1.Field<string>("itemB") equals  dr2.Field<string>("item1")
      where dr1.Field<string>("itemA") == name
      select new {item = dr2.Field<string>("item"), 
                item2 = dr2.Field<string>("item2"), 
                itemA = dr1.Field<string>("itemA"), 
                itemB = dr1.Field<string>("itemB") }

保守性と拡張性のために、匿名型の代わりに常に名前付き型 (カスタム クラス) を使用してください。

于 2013-08-20T14:21:46.520 に答える