Linq查询。 4个项目的列表在列表中只变成1个项目

时间:2014-09-24 09:17:52

标签: c# asp.net-mvc linq entity-framework

我正在使用asp.net mvc,我正在拨打休息服务并在列表中收到4张收据(下图中的Se图片)。 问题是我想将我拥有的结果列表转换为响应结果,但仍然有列表中的4个项目。 将响应返回到我的观看次序而不是列表中包含 4 项目时,我只在列表中 1 存储, 1 收据。

我的Linq查询有什么问题?我几乎到处都添加了 .ToList()

提前致谢。

enter image description here

asp.net

我有一个类如下的模型

public class ReceiptsViewModel
{
    public List<RestAPI.Store> Stores { get; set; }
    public List<RestAPI.POSProvider> Providers { get; set; }
    public List<RestAPI.Receipt> Receipts { get; set; }
    public List<RestAPI.StoreChain> StoreChains { get; set; }
}

    [HttpGet]
    public ActionResult Receipts()
    {
        Guid userId = Guid.Parse(CookieHelper.GetCookieValue("UserId"));

        var result = ReceiptService.GetReceiptsByUserId(userId);

        var response = (from r in result.Receipts
            select new Eflag.Receipt.Web.Mvc.Areas.Dashboard.Models.User.ReceiptsViewModel()
            {
                Receipts = new List<Models.RestAPI.Receipt>()
                {
                    new Models.RestAPI.Receipt()
                    {
                        ReceiptUniqueId = r.ReceiptUniqueId,
                        ReceiptId = r.ReceiptId,
                        CashierId = r.CashierId,
                        CashierName = r.CashierName,
                        ReceiptDateTime = r.ReceiptDateTime,
                        POSPlace = r.POSPlace,
                        Total = r.Total,
                        TotalTax = r.TotalTax,
                        TotalNet = r.TotalNet,
                        TotalDiscount = r.TotalDiscount,
                        Rounding = r.Rounding,
                        ItemAmount = r.ItemAmount,
                        Currency = r.Currency,
                        CurrencyCode = r.CurrencyCode,
                        MembershipCardUsed = r.MembershipCardUsed,
                        MembershipCardId = r.MembershipCardId,
                        Revoked = r.Revoked,
                        CardCompany = r.CardCompany,
                        FreeText = r.FreeText,
                        Items = (from i in r.Items
                                 select new Item()
                                 {
                                     ItemUniqueId = i.ItemUniqueId,
                                     ItemId = i.ItemId,
                                     Ean = i.Ean,
                                     Name = i.Name,
                                     CurrentPrice = i.CurrentPrice,
                                     RegularPrice = i.RegularPrice,
                                     Color = i.Color,
                                     ItemRowCount = i.ItemRowCount,
                                     ItemOrder = i.ItemOrder,
                                     TotalGrossAmount = i.TotalGrossAmount,
                                     TotalNetAmount = i.TotalNetAmount,
                                     Removed = i.Removed
                                 }).ToList()
                    }
                }.ToList(),
                Stores = new List<Store>()
                {
                    new Store()
                    {
                        StoreUniqueId = r.Store.StoreUniqueId,
                        StoreId = r.Store.StoreId,
                        Name = r.Store.Name,
                        CorporateId = r.Store.CorporateId,
                        Adress = r.Store.Adress,
                        PostalCode = r.Store.PostalCode,
                        Phone = r.Store.Phone,
                        Email = r.Store.Email,
                        Status = r.Store.Status
                    }
                }.ToList(),
                Providers = new List<POSProvider>()
                {
                   new POSProvider()
                   {
                        POSProviderUniqueId = r.POSProvider.POSProviderUniqueId,
                        Name = r.POSProvider.Name,
                        CorporateId = r.POSProvider.CorporateId,
                        Adress = r.POSProvider.Adress,
                        PostalCode = r.POSProvider.PostalCode,
                        Phone = r.POSProvider.Phone,
                        ContactPerson = r.POSProvider.ContactPerson,
                        Email = r.POSProvider.Email,
                        Status = r.POSProvider.Status
                   }
                }.ToList(),
                StoreChains = new List<StoreChain>()
                {
                    new StoreChain()
                    {
                        StoreChainUniqueId = r.StoreChain.StoreChainUniqueId,
                        Name = r.StoreChain.Name,
                        StoreChainId = r.StoreChain.StoreChainId,
                        Status = r.StoreChain.Status
                    }
                }.ToList()
            });

        return View(response);
    }

2 个答案:

答案 0 :(得分:1)

问题是您正在创建一个ReceiptsViewModel列表,而不是一个包含多个收据的单个列表。

将代码更改为:

var response = new Eflag.Receipt.Web.Mvc.Areas.Dashboard.Models.User.ReceiptsViewModel
{
    Receipts = result.Receipts,
    Stores = result.Receipts.Stores,
    //rest of code snipped
}

答案 1 :(得分:0)

尝试使用List集合的ConvertAll方法。文档here

示例:

var response = result.Receipts.ToList().ConvertAll(x=> new Eflag.Receipt.Web.Mvc.Areas.Dashboard.Models.User.ReceiptsViewModel() {
   //do your convertations here
});