明显不在实体框架中工作

时间:2016-03-30 11:39:46

标签: c# entity-framework-6

用于获取文档名称列表的函数只有不同的...

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;
}

目前的结果是这个 -

  

在取消遗嘱/不遗嘱的情况下的宣誓书

     

在取消遗嘱/不遗嘱的情况下的宣誓书

     

分配函

     

分配函

     

死亡证明书

     

死亡证明书

     

租赁契约

     

租赁契约

     

申请人的照片身份

     

申请人的照片身份

     

占有信

     

占有信

     

已注册/未注册的意愿

     

已注册/未注册的意愿

5 个答案:

答案 0 :(得分:8)

您可以使用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());
}

答案 1 :(得分:1)

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();

答案 2 :(得分:0)

您正在选择documenttypemodel,这是不同的部分(因此会检查所有字段),您可能希望通过linq distinct or group by multiple properties进行区分,或者您可以先使用group by查看({{3}} )。
另一个选项是仅选择DocumentTypeNameEnglish字段,您将获得唯一的文档。

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

希望这就是你想要的,如果没有,你能发布更多细节吗?

答案 3 :(得分:0)

答案 4 :(得分:-1)

根据弗拉基米尔的评论切换到下面:

 .ToList().Distinct();