【问题标题】:Linq query. List of 4 items becomes only 1 items in listLINQ 查询。 4 个项目的列表仅变为列表中的 1 个项目
【发布时间】:2014-09-24 18:01:46
【问题描述】:

我正在使用 asp.net mvc,我正在调用休息服务并在列表中收到 4 张收据(Se 下图)。 问题是我想将我必须的结果列表转换为响应结果,但列表中仍有 4 个项目。 当返回对我的视图的响应而不是列表中的 4 项时,我只有 1 商店,列表中的 1 收据。 p>

我的 Linq 查询有什么问题?我几乎在所有地方都添加了 .ToList()

提前致谢。

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

【问题讨论】:

  • 此单个对象是您要捕获的列表中的最后一个对象吗?

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


【解决方案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
}

【讨论】:

  • 感谢您的回复。 :) 为什么应该是 r 变量?
【解决方案2】:

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

例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2012-07-06
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多