具有多个条件的LINT On DataTables

时间:2011-05-19 11:28:58

标签: c# linq datatable

这个查询似乎并不高兴。任何人的想法?

var results = from a in previousQuery
              join b in dtCounties.AsEnumerable()
              on new { a.CountyCode, a.StateCode } equals new { 
                  b.Field<string>("COUNTYCODE"),
                  b.Field<string>("StateCode") 
              }
              where b.Field<bool>("TrueOrFalse") == true
              select new
              {
                  CountyCode = a.CountyCode,
                  TrueOrFalse= b.Field<bool>("TrueOrFalse"),
                  Sum= a.Sum
              };

我得到的错误是

  

“无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问声明匿名类型成员。”

表示联接右侧的2列(即b.Field<string>("COUNTYCODE")b.Field<string>("StateCode"))。

2 个答案:

答案 0 :(得分:7)

这只是一个C#语法问题,而不是LINQ本身。请考虑以下事项:

var a = new { "1" };     // Error
var a = new { a = "1" }; // OK

只是澄清一下,这是以上结果:

on new { cc = a.CountyCode, sc = a.StateCode }
    equals new { cc = b.Field<string>("COUNTYCODE"),
                 sc = b.Field<string>("StateCode") }

答案 1 :(得分:1)

您需要将字段运算符的结果分配给命名属性。

试试这个:

var results= from a in previousQuery
             join b in dtCounties.AsEnumerable()
             on new { CountryCode = a.CountyCode, StateCode = a.StateCode } 
             equals new 
                    { CountryCode = b.Field<string>("COUNTYCODE") ,
                      StateCode = b.Field<string>("StateCode") }
             where b.Field<bool>("TrueOrFalse") == true
             select new
             {
                    CountyCode = a.CountyCode,
                    TrueOrFalse= b.Field<bool>("TrueOrFalse"),
                    Sum= a.Sum
             };