C# 在foreach循环中获取数据后,如何返回预排序的数据?
首先,我要抓取客户ID。然后,我得到与该客户ID关联的所有发票。我想返回所有按发票编号降序排列的数据。这是我的密码:C# 在foreach循环中获取数据后,如何返回预排序的数据?,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,首先,我要抓取客户ID。然后,我得到与该客户ID关联的所有发票。我想返回所有按发票编号降序排列的数据。这是我的密码: var rvInvoices = (from i in db.QB_INVOICES_HEADER where i.ClientID == cId select i).ToList(); foreach (var itm in rvInvoices) { InvoiceMod
var rvInvoices =
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
select i).ToList();
foreach (var itm in rvInvoices)
{
InvoiceModel cm = new InvoiceModel()
{
InvoiceNumber = itm.InvoiceNumber,
InvoiceSentDt = itm.InvoiceSentDt,
InvoiceDt = itm.InvoiceDt,
Amount = itm.Amount,
Term = itm.Term,
ClientName = itm.CI_CLIENTLIST.ClientName
};
listInvoices.Add(cm);
}
return listInvoices;
您应该尝试以下方法:
var rvInvoices =
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
select i).OrderByDescending(x => x.InvoiceNumber);
我看不出您需要调用
.ToList()
的原因。您应该尝试以下方法:
var rvInvoices =
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
select i).OrderByDescending(x => x.InvoiceNumber);
我看不出您需要调用
.ToList()
的原因您应该在数据库而不是客户端上订购它们:
var rvInvoices = db.QB_INVOICES_HEADER
.Where(i => i.ClientID == cId)
.OrderByDescending(i => i.InvoiceNumber);
您应该在数据库而不是客户机上订购:
var rvInvoices = db.QB_INVOICES_HEADER
.Where(i => i.ClientID == cId)
.OrderByDescending(i => i.InvoiceNumber);
你可以在三个地方下单
中,或
返回中
var rvInvoices =
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
select i).OrderByDescending(i => i.InvoiceNumber).ToList();
备选案文2:
foreach(rvInvoices.OrderByDescending中的var itm(i=>i.InvoiceNumber))
备选案文3:
返回列表invoices.OrderByDescending(i=>i.InvoiceNumber.ToList()代码>
我建议您选择路线1,因为它将在数据库级别运行订单。您可以在三个位置执行订单
在初始查询中
在foreach的中,或
在返回中
备选案文1:
var rvInvoices =
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
select i).OrderByDescending(i => i.InvoiceNumber).ToList();
备选案文2:
foreach(rvInvoices.OrderByDescending中的var itm(i=>i.InvoiceNumber))
备选案文3:
返回列表invoices.OrderByDescending(i=>i.InvoiceNumber.ToList()代码>
我建议采用路线1,因为它将在数据库级别运行订单。您当前使用的方法创建多个列表,具有显式的foreach
循环,并且需要对其输出进行排序。只需创建一个列表,无显式循环,并由数据库为您排序即可:
return
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
// have the database do the sorting
orderby i.InvoiceNumber descending
select i)
// break out of the DB query to make InvoiceModel
.ToEnumerable()
.Select(itm => new InvoiceModel()
{
InvoiceNumber = itm.InvoiceNumber,
InvoiceSentDt = itm.InvoiceSentDt,
InvoiceDt = itm.InvoiceDt,
Amount = itm.Amount,
Term = itm.Term,
ClientName = itm.CI_CLIENTLIST.ClientName
})
// only create one list as the last step
.ToList();
当前使用的方法创建多个列表,具有显式的foreach
循环,并且需要对其输出进行排序。只需创建一个列表,无显式循环,并由数据库为您排序即可:
return
(from i in db.QB_INVOICES_HEADER
where i.ClientID == cId
// have the database do the sorting
orderby i.InvoiceNumber descending
select i)
// break out of the DB query to make InvoiceModel
.ToEnumerable()
.Select(itm => new InvoiceModel()
{
InvoiceNumber = itm.InvoiceNumber,
InvoiceSentDt = itm.InvoiceSentDt,
InvoiceDt = itm.InvoiceDt,
Amount = itm.Amount,
Term = itm.Term,
ClientName = itm.CI_CLIENTLIST.ClientName
})
// only create one list as the last step
.ToList();
既然可以在数据库中排序,为什么还要在内存中排序呢?这类事情通常做得更好。看看这页上的其他答案。既然可以在数据库中排序,为什么还要在内存中排序呢?这类事情通常做得更好。看看这页上的其他答案。谢谢!我试试第一种方法。谢谢!我试试第一种方法。