LINQ - 如何更改/转换FirstOrDefault()tolist()或SelectMany()

时间:2017-12-20 10:40:05

标签: c# linq serialization

我有以下LINQ查询,其中每一行都做了一些事情,但那行序列号我也用**标记它将返回First Or Default或只是一行,但是我的数据库中的那一列(Serial No)必须有很多行而不只是一行,这意味着如果我们在数据库中有10个项目用于ex 10联想键盘,这意味着我们为每个键盘有10个不同的序列号,但我写的查询将只显示第一个序列号,所以如何更改它以显示序列号的所有/行!谁能指引我朝正确的方向发展? THX

** PS当我将FirstOrDefault更改为tolist()时,我将在此行下出现错误SerialNoDeliverdLineOpenOrdre = t.SerialNo.Serial_No_,|错误是关于系统集合通用列表不包含Serial_No _

的定义

行动和查询:

var col2 = data_2.Shipment.Where(t => t.Order_No_ == OrdreNo).Select(t => new
                {
                    **SerialNo = data_2.Serial_Numbers.Where(ledger => ledger.Document_No_ == t.Document_No_)
                            .Where(ledger => ledger.Document_Line_No_ == t.Line_No_)
                            .toList(),

                });

var bla3 = col2.Select(t => new Ordre_Open_Details_VM.OrdreDetailDeliveryLineOpen
                {
                 **SerialNoDeliverdLineOpenOrdre = t.SerialNo.Select(x=>x.Serial_No_).ToList(), ** //Serial No

                })
            .ToList();

类别:

 public OrdreDetailDeliveryLineOpen(List<string> SerialNoDeliverdLineOpenOrdre)
                        {
     ** this.SerialNoDeliverdLineOpenOrdre = SerialNoDeliverdLineOpenOrdre;**

      }
         }

     ** public List <string> SerialNoDeliverdLineOpenOrdre { get; set; } **  
    }

1 个答案:

答案 0 :(得分:0)

因此,经过评论中的长时间讨论后,这似乎有效:

1)将SerialNoDeliverdLineOpenOrdre定义为List<string>而不是string

public List <string> SerialNoDeliverdLineOpenOrdre { get; set; }

2)为SerialNo分配一个列表:

SerialNo = data_2.Item_Ledger_Entry.Where(ledger => ledger.Document_No_ == t.Document_No_)
                .Where(ledger => ledger.Document_Line_No_ == t.Line_No_).ToList();

3)将列表分配给新的SerialNoDeliverdLineOpenOrdre

SerialNoDeliverdLineOpenOrdre = t.SerialNo.Select(x=>x.Serial_No_).ToList(),

4)然后,要在前端渲染列表,请循环遍历列表项:

foreach (var FieldShipment in Model.OrdreDetailDeliveryLineOpens)
{
    <ul>
    foreach(var x in FieldShipment.SerialNoDeliverdLineOpenOrdre)
    {
       <li>@x</li>
    }
    </‌‌​​ul>
}