我有一個DTO類和一個使用實體框架轉換爲列表的表。C#和LINQ比較兩個列表中的特定項目
當我的網頁發佈時,它會發送我的dto列表。我想要做的是編寫代碼,根據特定元素將dto列表與EF列表進行比較。這是我的代碼...
MY DTO
public class DTOAddNewSpecialNeed
{
public long PersonId { get; set; }
public List<AddEditSpecialNeedList> SelectedSpecialNeeds { get; set; }
public List<AddEditSpecialNeedList> AvailableSpecialNeeds { get; set; }
public Guid LtcConcurrencyCheck { get; set; }
public class AddEditSpecialNeedList
{
public int PersonSpecialNeedId { get; set; }
public int SpecialNeedTypeId { get; set; }
public string SpecialNeedDescription { get; set; }
public DateTime? StopDate { get; set; }
public int SortOrder { get; set; }
}
}
我的訪問代碼... dtoSelectedList是我的DTO李斯特的傳遞......我dbSelectedList是我的EF對象(表)我比較。基本上我想保留db中存在的所有dto的列表(dbselectelist,其中specialneedtypeid的匹配和specialneedtype不是其他的(-12))。我也可以有重複。現在這個代碼沒有考慮它。是否有更好的方法寫這個代碼還是我只是在做我比較錯誤
在上面的邏輯是var matchedDtos = dtoSelectedList.SelectMany(dto => dbSelectedList
.Where(db => db.SpecialNeedTypeID == dto.SpecialNeedTypeId
&& dto.SpecialNeedTypeId != -12)).ToList();
var matchedOtherDtos = dtoSelectedList.SelectMany(dto => dbSelectedList
.Where(db => db.SpecialNeedTypeID == dto.SpecialNeedTypeId
&& dto.SpecialNeedTypeId == (int)SpecialNeedType.Other
&& db.OtherTypeText == dto.SpecialNeedDescription.Replace("Other: ", "").Trim())).ToList();
我的方法簽名的SpecialNeed類是通過實體生成的類:?
public List<SpecialNeed> NeedsCompareDtoToDb(List<DTOAddNewSpecialNeed.AddEditSpecialNeedList> dtoSelectedList, List<SpecialNeed> dbSelectedList
請告訴我問題嗎? – Liam
「這不起作用,爲什麼?」你是什麼意思?你能解釋你想達到什麼嗎? –
嘗試使用dto.contains(db)而不是== –