我的代码和这个 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/