简体   繁体   English

LINQ错误-无法隐藏IEnumerable <IEnumerable<object> &gt;到IEnumerable <object>

[英]LINQ error- cannot covert IEnumerable<IEnumerable<object>> to IEnumerable<object>

This is the code: 这是代码:

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); 

Which is causing this error: 导致此错误的原因:

Cannot convert IEnumerable<IEnumerable<object>> to IEnumerable<object> 无法将IEnumerable <IEnumerable <object >>转换为IEnumerable <object>

I don't understand. 我不明白 What is the solution? 解决办法是什么?

It looks like you are selecting a collection of collections. 您似乎正在选择一个收藏集。 What you need is to flatten whatever you selecting. 您需要的是拼合您的选择。 You will achieve your goal by replacing the Select with SelectMany . 通过将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)); 

This is working exactly as I was looking for. 这完全符合我的要求。

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()); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 选择IEnumerable <object> 来自IEnumerable <IEnumerable<object> &gt; linq - Select IEnumerable<object> from IEnumerable<IEnumerable<object>> linq 如何在IEnumerable上执行LINQ <Employee> / IEnumerable <object> ? - How to perform LINQ on IEnumerable<Employee> / IEnumerable<object>? 为什么IEnumerable <struct> 转换为IEnumerable <object> ? - Why cannot IEnumerable<struct> be cast as IEnumerable<object>? 如何通过错误将对象直接添加到嵌套的无数集合对象组中-无法将列表转换为集合 - how to add object directly to nested ienumerable collection object group by Error- Cannot convert List to Collection IEnumerable对象? - IEnumerable to Object? 从IEnumerable转换为IEnumerable <object> - Cast from IEnumerable to IEnumerable<object> 检查IEnumerable <object>是否为IEnumerable <int> - Check if IEnumerable<object> is IEnumerable<int> 为什么`IEnumerable<int> ` 不是 `IEnumerable<object> `?<div id="text_translate"><p> IEnumerable<T>接口是协变的,因此IEnumerable<string>是IEnumerable<object> 。 但是为什么IEnumerable<int><em><strong>不是</strong></em>IEnumerable<object>而int是object ?</p></div></object></int> - Why `IEnumerable<int>` is not `IEnumerable<object>`? LINQ to XML返回一个对象而不是IEnumerable <object> - LINQ to XML return an object instead of IEnumerable<object> linq从函数返回IEnumerable &lt;{Object,Object}&gt; - linq returning IEnumerable<{Object,Object}> from a function
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM