2

我正在加入两个数据表并使用 LINQ 进行选择。我在“orderby”行中遇到错误。“当前上下文中不存在名称‘联系人’”。如果我按“客户”变量中的列排序,它可以工作,但不使用“联系人”变量中的列。

然后我删除了 orderby 行并尝试使用 lambda 表达式对其进行排序,例如:

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"])
                                  });
4

1 回答 1

1

存在一些语法问题(括号太多, fe 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")
                  };

旁注:我会使用强类型Field扩展方法。

于 2012-06-01T22:50:41.317 回答