c# - 如何将一个或多个 LINQ Lambda 返回记录放入列表?! C#

标签 c# linq lambda

我的代码和这个 Action 中的每一行都会做一些事情并从数据库中检索一些记录,让我举一个关于这个 Action 的例子,这个 Action 将显示订单和订单下的产品,这意味着订单(1212 ) 可能有 1 种产品或多种产品,但我的代码只显示该订单的一条记录而不是所有记录,所以我的问题是如何列出此操作的返回记录?!或者我应该做点别的吗!谁能指导我正确的方向?谢谢

Controller 中的代码:

public ActionResult OrdreOpenDetails(string id)
{
    DataContext data_2 = new DataContext();
    Ordre_Open_Details_VM oodvm = new Ordre_Open_Details_VM();



    oodvm.SalesLine = data_2.Sales_Line.FirstOrDefault(n => n.Document_No_ == id);
    oodvm.SalesHeader = data_2.Sales_Header.FirstOrDefault(m => m.No_ == oodvm.SalesLine.Document_No_);
    oodvm.SalesPersonPurchasers = data_2.Salesperson_Purchasers.FirstOrDefault(h=>h.Code == oodvm.SalesHeader.Salesperson_Code);
    oodvm.SalesCommentLine = data_2.Sales_Comment_Line.FirstOrDefault(z => z.No_ == oodvm.SalesLine.Document_No_);
    oodvm.PurchaseLine = data_2.Purchase_Line.FirstOrDefault(t=>t.Document_No_ == oodvm.SalesLine.Købsordrenr_);



    return View(oodvm);
} 

我的 ViewModel 类:

  public class Ordre_Open_Details_VM
    {
        public Sales_Header SalesHeader { get; set; }
        public Sales_Line SalesLine { get; set; }
        public Purchase_Line PurchaseLine { get; set; }
        public Salesperson_Purchasers SalesPersonPurchasers { get; set; }
        public Sales_Comment_Line SalesCommentLine { get; set; }
    }

View 中的代码:

@model DBhandling.Ordre_Open_Details_VM


<h2>OrdreOpenDetails</h2>

<div class="content">
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-4 col-md-5">
                <div class="card">
                    <div class="card-header" data-background-color="purple">
                        <h4 class="title">Detaljer</h4>
                        @*<p class="category">Detaljer <span>»</span> Order nr <span>»</span> @Model.SalesInvoiceHeader.Order_No_</p>*@
                    </div>
                    <div class="card-content">
                        <form>

                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group label-floating">
                                        <label>Order nr.</label>
                                        <input type="text" class="form-control border-input" disabled value="@Model.SalesHeader.No_">
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group label-floating">
                                        <label>vare nummer</label>
                                        <input type="text" class="form-control border-input" disabled value="@Model.SalesLine.No_">
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group label-floating">
                                        <label>Forventet levering</label>
                                        <input type="datetime" class="form-control border-input" disabled value="@Model.SalesLine.Planned_Delivery_Date">
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group label-floating">
                                        <label>Forventet levering Direkte</label>
                                        <input type="datetime" class="form-control border-input" disabled value="@(Model.PurchaseLine != null ? Model.PurchaseLine.Planned_Receipt_Date :(DateTime?)null )">
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group label-floating">
                                        <label>Sales Person</label>
                                        <input type="text" class="form-control border-input" disabled value="@Model.SalesPersonPurchasers.Name">
                                    </div>
                                </div>

                            </div>
                            <div class="row">
                                <div class="col-md-12">
                                    <div class="form-group label-floating">
                                        <label>Comment</label>
                                        <input type="text" class="form-control border-input" disabled value="@(Model.SalesCommentLine != null ? Model.SalesCommentLine.Comment : "No Comment")">
                                    </div>
                                </div>
                            </div>


                            <div class="clearfix"></div>
                        </form>
                    </div>


                </div>

            </div>
        </div>
    </div>
</div>

最佳答案

编辑:我看到您的 LINQ 条件是基于 SalesLine 分配中设置的 ID 的值? (m => m.No_ == oodvm.SalesLine.Document_No_) 这不是一个非常聪明的做法,更改此逻辑以根据数据本身中的 ID 选择订单,而不是根据您之前检索的内容,否则我所描述的方法将不起作用。我不知道您的数据是如何设置的,所以我将在 SelectMany 函数调用中保留“条件”。

您可以更改您的 View 模型类以包含每个对象的列表而不是只有一个实例

public class Ordre_Open_Details_VM
{
    public List<Sales_Header> SalesHeader { get; set; }
    public List<Sales_Line> SalesLine { get; set; }
    public List<Purchase_Line> PurchaseLine { get; set; }
    public List<Salesperson_Purchasers> SalesPersonPurchasers { get; set; }
    public List<Sales_Comment_Line> SalesCommentLine { get; set; }
}

然后您可以使用 SelectMany Linq 方法检索所有满足您条件的订单。

oodvm.SalesLine = data_2.Sales_Line.SelectMany(condition);
oodvm.SalesHeader = data_2.Sales_Header.SelectMany(conditon);
oodvm.SalesPersonPurchasers = data_2.Salesperson_Purchasers.SelectMany(condition);
oodvm.SalesCommentLine = data_2.Sales_Comment_Line.SelectMany(condtion);
oodvm.PurchaseLine = data_2.Purchase_Line.SelectMany(condition);

这样设置,oodvm 的属性将包含多个订单,每个索引将对应一个条目。

所以

oodvm.SalesLine[0]
oodvm.SalesHeader[0]
oodvm.SalesPersonPurchasers[0]
//...

将代表您想要的第一个订单。您可以根据需要使用它进行迭代。

关于c# - 如何将一个或多个 LINQ Lambda 返回记录放入列表?! C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813194/

相关文章:

c# - NullReferenceException 在启动时遇到 Owin .Net Core 2.0 - 设置?

c# - 在字符串上调用 .ToString() 来更改其格式

c# - LINQ,仅选择子项的第一个元素

java - Java 中的 OrderByDescending(LINQ) 等效项

java - Java 8 Comparator 类型推断非常困惑

c# - 在编程更改工作簿时隐藏 Excel 2013

c# - 阻止远程桌面暴力破解

c# - 根据分组修改列表中元素属性的最佳方法

python - python 动态生成函数参数

c# - 有没有办法在表达式树中设置 'DeclaringType'?