在日常開發中常常是這么寫的
var logErrorRequest = from l in _logErrorRepository.Table select new { WrongTime = l.WrongTime, InstitutionlGuid = l.InstitutionlGuid, DataSource = l.DataSource, AccessionNumber = l.AccessionNumber, ServiceSectID = l.ExamineType, BusinessID = l.BusinessID }; if (query.InstitutionGuid != null) { logErrorRequest = logErrorRequest.Where(t => t.InstitutionlGuid == query.InstitutionGuid); } if (query.LastUpdateDateStart != null) { logErrorRequest = logErrorRequest.Where(t => t.WrongTime >= query.LastUpdateDateStart); } if (query.LastUpdateDateEnd != null) { logErrorRequest = logErrorRequest.Where(t => t.WrongTime <= query.LastUpdateDateEnd); } var result = logErrorRequest.Distinct();
但是實際上想要
Distinct的字段只有
InstitutionlGuid,DataSource,AccessionNumber三個字段,可是如果只查詢這三個的話下面的條件中的字段就會編譯報錯,為了只查詢這三個字段並且還能使條件的字段可以使用,可以改造成如下寫法:
var logErrorRequest = from l in _logErrorRepository.Table select l; //直接寫所有字段,這樣就可以使用條件字段 if (query.InstitutionGuid != null) { logErrorRequest = logErrorRequest.Where(t => t.InstitutionlGuid == query.InstitutionGuid); } if (query.LastUpdateDateStart != null) { logErrorRequest = logErrorRequest.Where(t => t.WrongTime >= query.LastUpdateDateStart); } if (query.LastUpdateDateEnd != null) { logErrorRequest = logErrorRequest.Where(t => t.WrongTime <= query.LastUpdateDateEnd); } //在distinct的時候才會去查詢,所以這里就可以select需要distinct的字段,然后再查詢 var result = logErrorRequest.Select(t=>new {t.InstitutionlGuid,t.DataSource,t.AccessionNumber }).Distinct();