LINQ 错误 - 无法将 IEnumerable<IEnumerable<object>> 转换为 Enumerable<object>
LINQ error- cannot covert IEnumerable<IEnumerable<object>> to IEnumerable<object>
这是代码:
IEnumerable<StockVendorHistoryModal> vendorhistoryList
= Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate =
c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
})
.GroupBy(d => d.VendorNumber).ToList()
.Select(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate)
.Take(4);
导致此错误的原因:
Cannot convert IEnumerable<IEnumerable<object>> to IEnumerable<object>
我不明白。解决方法是什么?
IEnumerable<StockVendorHistoryModal> vendorhistoryList
= Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate =
c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
})
.GroupBy(d => d.VendorNumber).ToList()
.Select(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate)
.Take(4)
.Select(g => g.First());
您似乎正在选择一组集合。你需要的是展平你选择的任何东西。您将通过将 Select
替换为 SelectMany
.
来实现您的目标
IEnumerable<StockVendorHistoryModal> vendorhistoryList = Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder == null ? null : c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder == null ? string.Empty : c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
VendorName = c.PurchaseOrder == null ? string.Empty : c.PurchaseOrder.PurchaseOrderVendor.Vendor.Name,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate = c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
}).GroupBy(d => d.VendorNumber)
.SelectMany(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate).Take(4));
这完全符合我的要求。
这是代码:
IEnumerable<StockVendorHistoryModal> vendorhistoryList
= Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate =
c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
})
.GroupBy(d => d.VendorNumber).ToList()
.Select(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate)
.Take(4);
导致此错误的原因:
Cannot convert IEnumerable<IEnumerable<object>> to IEnumerable<object>
我不明白。解决方法是什么?
IEnumerable<StockVendorHistoryModal> vendorhistoryList
= Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate =
c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
})
.GroupBy(d => d.VendorNumber).ToList()
.Select(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate)
.Take(4)
.Select(g => g.First());
您似乎正在选择一组集合。你需要的是展平你选择的任何东西。您将通过将 Select
替换为 SelectMany
.
IEnumerable<StockVendorHistoryModal> vendorhistoryList = Session.Query<PurchaseOrderLineItem>()
.Where(popredicate)
.Where(p => p.Stock.Number != null)
.Select(c => new StockVendorHistoryModal
{
StockId = c.Stock.Id,
LastPurchaseDate = c.PurchaseOrder == null ? null : c.PurchaseOrder.OrderDate.ToString("yyyy/MM/dd"),
VendorNumber = c.PurchaseOrder == null ? string.Empty : c.PurchaseOrder.PurchaseOrderVendor.Vendor.Number,
VendorName = c.PurchaseOrder == null ? string.Empty : c.PurchaseOrder.PurchaseOrderVendor.Vendor.Name,
LastPurchasePrice = c.UnitPrice,
LastTransactionDate = c.LastTransactionDate != null ? c.LastTransactionDate.Value.ToString("yyyy/MM/dd") : null,
LeadTimeDays = GetDays(c.PurchaseOrder.OrderDate, c.LastTransactionDate),
}).GroupBy(d => d.VendorNumber)
.SelectMany(gpo => gpo.OrderByDescending(x => x.LastPurchaseDate).Take(4));
这完全符合我的要求。