【问题标题】:Using LINQ to do complicated queries with datasets使用 LINQ 对数据集进行复杂查询
【发布时间】:2011-09-29 19:08:57
【问题描述】:

我有几个需要查询的数据集。使用 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 语句查询数据集?

【问题讨论】:

    标签: c# sql linq dataset


    【解决方案1】:

    您可以简化 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,这将使生活变得更轻松。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多