簡體   English   中英

明顯不在實體框架中工作

[英]Distinct not working in entity framework

獲取文檔列表的函數只有不同的...

public static List<DocumentTypeModel> GetUploadedDocumentsName(int TicketId)
{
    List<DocumentTypeModel> documents = new List<DocumentTypeModel>();
    using (var db = new UnitOfWork())
    {
        documents = db.tbl_TrnTicketDocument.Get(x => x.FK_TicketId == TicketId && x.IsActive == true).Select(s => new DocumentTypeModel()
        {
            DocumentTypeNameEnglish = s.tbl_MstDocumentType.DocumentTypeNameEnglish
        }).Distinct().ToList();
    }
    return documents;
}

目前的結果是 -

在取消遺囑/不遺囑的情況下的宣誓書

在取消遺囑/不遺囑的情況下的宣誓書

分配信

分配信

死亡證明

死亡證明

租賃契約

租賃契約

申請人的照片身份

申請人的照片身份

占有信

占有信

已注冊/未注冊的遺囑

已注冊/未注冊的遺囑

您可以使用groupby並選擇第一個選項,如下所示:

List<DocumentTypeModel> documents = new List<DocumentTypeModel>();
using (var db = new UnitOfWork())
{
   documents = db.tbl_TrnTicketDocument.Get(x => x.FK_TicketId == TicketId && x.IsActive == true).Select(s => new DocumentTypeModel()
   {
   DocumentTypeNameEnglish = s.tbl_MstDocumentType.DocumentTypeNameEnglish
   }).ToList();

   documents = documents.GroupBy(x => x.DocumentTypeNameEnglish).Select(g => g.First());
}

Distinct()不像你在對象上嘗試的那樣工作。 使用IComparer來實現這個功能https://support.microsoft.com/en-us/kb/320727

創建一個比較器類

public class DocumentTypeModelComparer: IComparer
{
  int IComparer.Compare(object a, object b)
 {
   if(a.Id == b.ID)
     return 0;
   else
     return 1;
  }
}

現在在你的lambda表達式中

 documents = db.tbl_TrnTicketDocument.Get(x => x.FK_TicketId == TicketId && x.IsActive == true).Select(s => new DocumentTypeModel()
        {
            DocumentTypeNameEnglish = s.tbl_MstDocumentType.DocumentTypeNameEnglish
        }).ToList().Distinct(new DocumentTypeModelComparer()).ToList();

您正在選擇documenttypemodel,這是不同的部分(因此檢查所有字段),您可能希望通過https://github.com/morelinq/MoreLINQ進行區分,或者您可以先使用group by( linq distinct)或由多個屬性分組 )。
另一個選項是僅選擇DocumentTypeNameEnglish字段,您將獲得唯一的文檔。

 documents = db.tbl_TrnTicketDocument.Get(x => x.FK_TicketId == TicketId && x.IsActive == true).Select(s => new  { documentTypes =s.tbl_MstDocumentType.DocumentTypeNameEnglish}).Distinct().ToList();

希望這是你想要的,如果沒有,你能發布更多細節嗎?

根據弗拉基米爾的評論切換到下面:

 .ToList().Distinct();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM