LINQ:将内联查询重写为Linq方法样式?

时间:2011-04-11 23:12:55

标签: c# linq

如何使用LINQ方法而不是内联查询样式重写?

var cp = from DataRow r in rptDataPkg.Datasets.Item(0).Result.Rows
                where (r.Field<string>("UnitItem") == "PC") &&
                      (r.Field<string>("UnitItem") == "Hs") &&
                      (r.Field<string>("UnitItem") == "U")
                select new CurrProjected 
                { 
                    doAddUp = (r.Field<Decimal>("Fld1") + r.Field<Decimal>("Fld2")) 
                                == r.Field<Decimal>("Fld3")
                };

2 个答案:

答案 0 :(得分:1)

我个人更喜欢这种语法与其他解决方案。

var cp = rptDataPkg.Datasets.Item(0).Result.Rows
                .Where(r => r.Field("UnitItem") == "PC")
                .Where(r => r.Field("UnitItem") == "Hs")
                .Where(r => r.Field("UnitItem") == "U")
                .Select(r => new CurrProjected
                {
                    doAddUp = (r.Field("Fld1") + r.Field("Fld2"))
                                     == r.Field("Fld3")
                });

答案 1 :(得分:0)

尝试以下

var cp = rptDataPkg.Datasets.Item(0).Result.Rows
  .Cast<DataRow>()
  .Where(r => (r.Field<string>("UnitItem") == "PC") &&
              (r.Field<string>("UnitItem") == "Hs") &&
              (r.Field<string>("UnitItem") == "U"))
  .Select(r => new CurrProjected 
               { 
                   doAddUp = (r.Field<Decimal>("Fld1") + r.Field<Decimal>("Fld2")) 
                             == r.Field<Decimal>("Fld3")
               });