使用多个条件的DataTable上的LINQ查询

3
这个查询似乎不太顺利,有什么建议吗?
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个回答

8

这只是一个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") }

同意。我认为这里的问题是在 new { b.Field<string>("COUNTYCODE") ,b.Field<string>("StateCode") } 上,应该设置命名为 new { field1 = b.Field<string>("COUNTYCODE") , field2 = b.Field<string>("StateCode") }。 - VikciaR

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
             };

那样做不行,因为有 new { a.CountyCode, a.StateCode } 这个短语,请看我的答案。 - Simeon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接