LINQ On DataTables с несколькими условиями - PullRequest
2 голосов
/ 19 мая 2011

Этот запрос не выглядит очень счастливым. Любые идеи кто-нибудь?

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 ]

7 голосов
/ 19 мая 2011

Это просто проблема синтаксиса 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 голос
/ 19 мая 2011

Вам необходимо присвоить результаты оператора поля именованным свойствам.

Попробуйте это:

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
             };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...