Использование LINQ для выполнения сложных запросов с наборами данных - PullRequest
0 голосов
/ 06 июля 2011

У меня есть несколько наборов данных, которые мне нужно запросить.Используя linq, я получаю такой код ..

var query =
     from table1 in table_1.AsEnumerable()
     join table2 in table_2.AsEnumerable()
on table1.Field<string>("Value1") equals
   table2.Field<string>("value2") into join1
from joinData in join1.AsEnumerable()
join table1_1 in table_1.AsEnumerable()
on joinData.Field<string>("Value3") equals
   table1_1.Field<string>("Value1")
into join2
from joinData2 in join2.AsEnumerable()
where joinData2.Field<string>("Value4") == "1" ||
      joinData2.Field<string>("Value4") == "2" ||
      joinData2.Field<string>("Value4") == "3" ||
      joinData2.Field<string>("Value4") == "4" ||
      joinData2.Field<string>("Value4") == "5" ||
      joinData2.Field<string>("Value4") == "6" ||
      joinData2.Field<string>("Value4") == "7" ||
      joinData2.Field<string>("Value4") == "8"
select new
{
    Value1 = data1.Field<string>("Value1"),
    Value2 = data1.Field<string>("Value2"),
    Value3 = data1.Field<string>("Value3"),
    Value4 = data1.Field<string>("Value4"),
    Value5 = data1.Field<string>("Value5"),
    Value6 = data1.Field<string>("Value6"),
    Value7 = data1.Field<string>("Value7"),
    Value8 = data1.Field<string>("Value8"),
    Value9 = data1.Field<string>("Value9"),
    Value10 = data1.Field<string>("Value10"),
    Value11 = data1.Field<string>("Value11"),
    Value12 = data1.Field<string>("Value12"),

    etc...
};

Должен быть более простой способ сделать это.Есть ли способ просто запросить набор данных с помощью оператора SQL?

1 Ответ

2 голосов
/ 06 июля 2011

Вы можете упростить часть WHERE:

where joinData2.Field<string>("Value4") == "1" ||
      joinData2.Field<string>("Value4") == "2" ||
      joinData2.Field<string>("Value4") == "3" ||


where List<string>{ "1", "2", "3", ... }
      .Contains( joinData2.Field<string>("Value4"))

И, возможно, вы могли бы реорганизовать часть SELECT в конструктор (неанонимного типа).

Но нет, вы не можете применять SQL к наборам данных (помимо того, что вы уже делаете с LINQ).

Подумайте об использовании ORM-подобной среды Entity, которая облегчит жизнь.

...