C# 使用LINQ对数据集进行复杂查询

C# 使用LINQ对数据集进行复杂查询,c#,sql,linq,dataset,C#,Sql,Linq,Dataset,我有几个数据集需要查询。使用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.AsE

我有几个数据集需要查询。使用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...
};
var查询=
来自表1中的表1。可计算()
将表2连接到表2中。AsEnumerable()
在表1中,字段(“值1”)等于
表2.将字段(“值2”)分为join1
来自join1.AsEnumerable()中的joinData
将表1_1连接到表_1.AsEnumerable()中
在joinData.Field上(“Value3”)等于
表1\u 1.字段(“值1”)
加入2
来自join2.AsEnumerable()中的joinData2
其中joinData2.Field(“Value4”)=“1”||
joinData2.字段(“值4”)=“2”||
joinData2.字段(“值4”)=“3”||
joinData2.字段(“值4”)=“4”||
joinData2.字段(“值4”)=“5”||
joinData2.字段(“值4”)=“6”||
joinData2.字段(“值4”)=“7”||
joinData2.字段(“值4”)=“8”
选择新的
{
Value1=data1.字段(“Value1”),
Value2=data1.字段(“Value2”),
Value3=data1.字段(“Value3”),
Value4=数据1.字段(“Value4”),
Value5=数据1.字段(“Value5”),
Value6=数据1.字段(“Value6”),
Value7=数据1.字段(“Value7”),
Value8=数据1.字段(“Value8”),
Value9=data1.字段(“Value9”),
Value10=data1.字段(“Value10”),
Value11=data1.字段(“Value11”),
Value12=数据1.字段(“Value12”),
等
};

必须有一个更简单的方法来做到这一点。有没有办法只使用SQL语句查询数据集?

您可以简化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"))
其中joinData2.Field(“Value4”)=“1”||
joinData2.字段(“值4”)=“2”||
joinData2.字段(“值4”)=“3”||
其中列表{“1”、“2”、“3”、…}
.Contains(joinData2.Field(“Value4”))
也许您可以将SELECT部分重构成一个构造函数(非匿名类型)

但是不能,您不能将SQL应用于数据集(除了您已经在使用LINQ进行的操作之外)

考虑使用一个类似ORM的实体框架,这将使工作变得更加轻松