C#,SQL和Linq的新手。我有两个列表,一个" dataTransactions" (来自加油站的燃料)和类似的一个" dataTransfers" (来自滑动罐的燃料)。
他们每个人都从SQL访问不同的表,并在以后合并。
List<FuelLightTruckDataSource> data = new List<FuelLightTruckDataSource>();
using (SystemContext ctx = new SystemContext())
{
List<FuelLightTruckDataSource> dataTransactions
= ctx.FuelTransaction
.Where(tx => DbFunctions.TruncateTime(tx.DateTime) >= from.Date && DbFunctions.TruncateTime(tx.DateTime) <= to.Date
//&& tx.AssetFilled.AssignedToEmployee.Manager
&& tx.AssetFilled.AssignedToEmployee != null
//&
&& tx.AssetFilled.AssetType.Code == "L"
&& (tx.FuelProductType.FuelProductClass.Code == "GAS" || tx.FuelProductType.FuelProductClass.Code == "DSL"))
.GroupBy(tx => new { tx.AssetFilled, tx.DateTime, tx.FuelProductType.FuelProductClass, tx.FuelCard.FuelVendor, tx.City, tx.Volume, tx.Odometer}) //Added tx.volume to have individual transactions
.Select(g => new FuelLightTruckDataSource()
{
Asset = g.FirstOrDefault().AssetFilled,
Employee = g.FirstOrDefault().AssetFilled.AssignedToEmployee,
ProductClass = g.FirstOrDefault().FuelProductType.FuelProductClass,
Vendor = g.FirstOrDefault().FuelCard.FuelVendor,
FillSource = FuelFillSource.Transaction,
Source = "Fuel Station",
City = g.FirstOrDefault().City.ToUpper(),
Volume = g.FirstOrDefault().Volume,
Distance = g.FirstOrDefault().Odometer,
Date = g.FirstOrDefault().DateTime
})
.ToList();
最后,我使用
data.AddRange(dataTransactions);
data.AddRange(dataTransfers);
将两个列表放在一起并生成燃料消耗报告。 两个列表都按日期单独排序,但在&#34; AddRange&#34;之后。 &#34; dataTransfers&#34;只是被添加到最后,按日期丢失我的排序。在使用&#34; AddRange&#34;之后,如何按日期再次对组合结果进行排序?命令?
答案 0 :(得分:5)
试试这个:
>= 0
或者如果您想订购降序:
data = data.OrderBy(d => d.Date).ToList();
答案 1 :(得分:1)
您可以致电List<T>.Sort(delegate)
。
https://msdn.microsoft.com/en-us/library/w56d4y5z(v=vs.110).aspx
示例:
data.Sort(delegate(FuelLightTruckDataSource x, FuelLightTruckDataSource y)
{
// your sort logic here.
});
优势:此类并不像IList<T>
中那样创建新的OrderBy
实例。它是一件小事,但对某些人来说这很重要,特别是对于性能和内存敏感的情况。