用于获取文档名称列表的函数只有不同的...
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;
}
目前的结果是这个 -
在取消遗嘱/不遗嘱的情况下的宣誓书
在取消遗嘱/不遗嘱的情况下的宣誓书
分配函
分配函
死亡证明书
死亡证明书
租赁契约
租赁契约
申请人的照片身份
申请人的照片身份
占有信
占有信
已注册/未注册的意愿
已注册/未注册的意愿
答案 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();