2012-06-01 2 views
1

Я присоединяюсь к двум типам данных и выбираю с помощью LINQ. Я получаю сообщение об ошибке в строке orderby. «Имя« контакт »не существует в текущем контексте». Если я заказываю по столбцам из «клиентской» переменной, он работает, но не использует столбцы из переменной «контакт».Как отсортировать IEnumerable <AnonymousType> или отсортировать два подключаемых к данным соединения с помощью LINQ?

Затем я удалил OrderBy линию и попытался заказать его с помощью лямбда-выражения, как:

orders.OrderBy(o => (string) o["ContactName"]; 

и я получил ошибку «Невозможно применить индексирование с [] к выражению типа„AnonymousType # 1“. Я не хочу, чтобы создать новый класс только для сортировки

Любые идеи, как сделать этот вид сортировки я буду делать то, используя несколько столбцов из обеих таблиц

КОД:...

var orders = (from customer in Customers.AsEnumerable() 
          join contact in Contacts.AsEnumerable() 
           on (int) customer["CustomerID"] equals (int) contact["CustomerID"] into outer 
           from contact in outer.DefaultIfEmpty() 
           orderby contact["ContactName"] 
          select new 
            { 
             ContactID = (int) contact["ContactID"]), 
             Name = (string) contact["ContactName"]), 
             City = (string) contact["City"]) 
            }); 

ответ

0

Есть некоторые проблемы с синтаксисом (слишком много парантез, f.e. contact["ContactID"])), это должно работать:

var orders = from customer in Customers.AsEnumerable() 
       join contact in Contacts.AsEnumerable() 
       on customer.Field<int>("CustomerID") equals contact.Field<int>("CustomerID") into outer 
        from contact in outer.DefaultIfEmpty() 
        orderby contact["ContactName"] 
        select new 
        { 
         ContactID = contact.Field<int>("ContactID"), 
         Name = contact.Field<String>("ContactName"), 
         City = contact.Field<String>("City") 
        }; 

Sidenote: я хотел бы использовать сильный тип Field метод расширения.

Смежные вопросы