【问题标题】:Join and order in LINQ C#在 LINQ C# 中加入和订购
【发布时间】:2015-10-12 09:46:17
【问题描述】:

我得到了以下骨架代码:

var test = SqlCompact(
"OrderID", "ASC", 5, 2,
 out count, out sortCriteria, out sql);

这会调用 SqlCompact 方法,该方法执行表订单、员工和客户的连接,然后通过输入进行订单,例如“ASC”和“列名”。

我已经让连接查询正常工作,但不确定如何根据输入对结果进行排序。这是我的 SqlCompact 方法代码:

public List<MyJoin> SqlCompact(
    string sort, string sortDir, int rowsPerPage, int page, 
    out int count, out string sortCriteria, out string sql) {    

var cec = new SqlCeConnection(
    string.Format(@"Data Source={0}\Northwind.sdf", Path));
var nwd = new DataContext(cec);

nwd.Log = new StringWriter();
var orders = nwd.GetTable<Order>();
var employees = nwd.GetTable<Employee>(); //
var customers = nwd.GetTable<Customer>(); //

count = orders.Count();
sortCriteria = "";

 var q = (from od in orders
        join em in employees on od.EmployeeID equals em.EmployeeID
        join ct in customers on od.CustomerID equals ct.CustomerID
        //orderby em.EmployeeID
        select new
        {
            od.OrderID,
            od.ShipCountry,
            ct.CompanyName,
            ct.ContactName,
            FullName = em.FirstName + ' '+ em.LastName, 
        }).ToList();

q.Dump();

sortCriteria:由 sort 和 sortDir 组成的字符串——采用动态 LINQ 可直接使用的格式,例如

OrderID ASC 
ContactName DESC, OrderID DESC

【问题讨论】:

标签: c# mysql linq linqpad


【解决方案1】:

这就是你想要做的: if (sort == "OrderId") { q = q.OrderBy(x => x.OrderId); }

不过,将列名作为字符串传递并不是一个好方法。

【讨论】:

  • 我收到此错误:无法将类型 'System.Linq.IOrderedEnumerable' 隐式转换为 'System.Collections.Generic.List'
  • 为避免该错误,只需调用 ToList() 例如 ...q = q.OrderBy(x =&gt; x.OrderId).ToList();
  • 速记使用 q.OrderByDescending(x => x.OrderId) 翻转排序顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 2014-10-16
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多