我有兩個這樣的模型:
public class Process
{
public int Id { get; set; }
public int PaletID { get; set; }
public Palet Palet { get; set; }
public DateTime Start { get; set; }
public DateTime? End { get; set; }
}
public class Palet
{
public int Id { get; set; }
public int DeliveryNoteID { get; set; }
public DateTime Date { get; set; }
public string Type { get; set; }
public int Length { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public int? Nrpcs { get; set; }
public double Volume { get; private set; }
public Status Status { get; set; }
public DeliveryNote DeliveryNote { get; set; }
}
我需要做的是選擇(用于自動完成),在 Palet 中存在但在 Process 中不存在并且以關鍵字開頭的 Id。
我想以這種方式訪問??資料:
string keyword;
var Data = await _context.Process
.Include(p => p.Palet)
.OrderBy(p => p.PaletID)
.Take(dm.Take)
.ToListAsync();
回傳應該是一個 int 甚至更好的物件 Processes 我該怎么做?
uj5u.com熱心網友回復:
我需要做的是選擇(用于自動完成),存在于 Palet 中但不存在于 Process 中的 Id。
listOfPalet.Select(p => p.Id).Except(listOfProcess.Select(p => p.Id))
請注意,該操作還將對 Palet ID 串列進行重復資料洗掉。輸出是一個僅包含 ID 的串列。如果您想要整個 Palet 物件,請告訴我,我會進行修改
uj5u.com熱心網友回復:
聽起來像是一份作業.GroupJoin()。也許是這樣的:
IReadOnlyList<Palet> palets = LoadPalets();
IReadOnlyList<Process> processes = LoadProcesses();
var paletsWithoutProcess = palets
.GroupJoin(
processes,
palet => palet.Id,
process => process.PaletId,
(palet, processes) => processes.Any() ? null : palet)
.Where(palet => palet != null)
.ToList();
uj5u.com熱心網友回復:
謝謝你的提示。成功了IEnumerable.Except()。最終解決方案如下所示:
var Data = await _context.Paleta
.Select(p => p.Id)
.Except(_context.Process.Select(p => p.PaletaID))
.Where(p => p.ToString().Contains(keyword))
.OrderBy(i=>i)
.Take(20)
.ToListAsync();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427134.html
下一篇:C#按模式重新排列串列
