[英]Generate serial no. in List using LINQ
我有三個模型和一個視圖模型。 模型如下:
public partial class SalesDetail
{
public long IID { get; set; }
public Nullable<long> SalesId { get; set; }
public int ItemId { get; set; }
public int UoM { get; set; }
public int Qty { get; set; }
public Nullable<decimal> Disc { get; set; }
public virtual General General { get; set; }
public virtual Item Item { get; set; }
public virtual Sale Sale { get; set; }
}
public partial class Item
{
public Item()
{
this.SalesDetails = new HashSet<SalesDetail>();
}
public int IID { get; set; }
public string Item1 { get; set; }
public int UoM { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<SalesDetail> SalesDetails { get; set; }
}
public partial class General
{
public General()
{
this.Parties = new HashSet<Party>();
this.Parties1 = new HashSet<Party>();
this.SalesDetails = new HashSet<SalesDetail>();
}
public int IID { get; set; }
public string Value { get; set; }
public string Desciption { get; set; }
public byte Type { get; set; }
public Nullable<int> ParentID { get; set; }
}
我也有一個視圖模型,如:
public class SalelsDetailListViewModel
{
public int SerialNo { get; set; }
public Int64 Id { get; set; }
public int ItemId { get; set; }
public string ItemName { get; set; }
public int UoM { get; set; }
public string UnitName { get; set; }
public int Qty { get; set; }
public decimal? Disc { get; set; }
}
我正在嘗試生成序列號。 在將 linq 查詢作為列表執行時。 稍后,此列表將顯示為帶有序列號的表格。 我寫了以下查詢。
lstDetails = (from d in db.SalesDetails
join i in db.Items on d.ItemId equals i.IID
join u in db.Generals on d.UoM equals u.IID
select new SalelsDetailListViewModel
{
SerialNo = ???,
Id = d.IID,
ItemId = i.IID,
ItemName = i.Item1,
UoM = u.IID,
UnitName = u.Value,
Qty = d.Qty,
Disc = d.Disc
}).ToList();
我無法理解如何使用其他項目在查詢中增加序列號。 謝天謝地,任何幫助都會被接受。
謝謝
帕塔
編輯:這是一個應該更好的替代解決方案
var lstDetails = (from d in salesDetailsList
join i in itemList on d.ItemId equals i.IID
join u in generalList on d.UoM equals u.IID
select new
{
Id = d.IID,
ItemId = i.IID,
ItemName = i.Item1,
UoM = u.IID,
UnitName = u.Value,
Qty = d.Qty,
Disc = d.Disc
})
.Select((s, index) => new SalesDetailListViewModel()
{
SerialNo = index,
Id = s.Id,
ItemId = s.ItemId,
ItemName = s.ItemName,
UoM = s.UoM,
UnitName = s.UnitName,
Qty = s.Qty,
Disc = s.Disc
}).ToList();
為什么不簡單地迭代結果並使用計數器設置?
你有多少元素? 你關心性能嗎?
你面臨什么困難?
var counter = 0;
foreach (var x in lstDetails) x.SerialNo = counter++;
您也可以在原始查詢中執行此操作,如下所示(使用 C# 7 ValueTuple)
var sample = new [] { "a", "b", "c" };
var count = 0;
sample.Select(x => (x, count++)).ToList();
// result
// List<ValueTuple<string, int>>(3) { [(a, 1)], [(b, 2)], [(c, 3)] }
或匿名類型,嘗試使用 Fiddle
var sample = new [] { "a", "b", "c" };
var count = 0;
sample.Select(x => new { x, c = count++ }).ToList();
// result
// List<<>f__AnonymousType0#8<string, int>>(3) { \{ x = "a", c = 1 }, \{ x = "b", c = 2 }, \{ x = "c", c = 3 } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.