2016-06-24 2 views
1

Я не самый большой с linq, но является языком выбора. Я пытаюсь написать запрос, используя sql like. Стандартный scenerio У меня есть счет-фактура, и этот счет-фактура содержит детали счета-фактуры. При объединении таблиц, конечно, счета-фактуры, у которых есть подробные детали, будут повторяться. В стандартном sql я мог использовать разные или группы. Я попытался следовать этому с помощью linq, но получаю ошибки или просто не отфильтровываю их.Удаление повторяющихся строк с использованием запроса linq

Вот мой запрос

var result = (from invoice in invoices 
     join invoiceItem in invItems on invoice.Id equals invoiceItem.InvoiceId 
     orderby invoice.InvoiceNo 
     select new InvoiceReceiveShipmentVM 
     { 
      dtInvoiced = invoice.dtInvoiced, 
      InvoiceNumber = invoice.InvoiceNo, 
      InvoiceType = invoice.InvoiceType, 
      InvoiceStatus = invoice.InvoiceStatus, 
      Lines = invoiceItem.Line, 
      Total = invoice.Total, 
      Carrier = invoice.Carrier, 
     }); 
return result.Distinct(); 

Я также попытался:

  var myList = result.GroupBy(x => x.InvoiceNumber) 
          .Select(g => g.First()).ToList(); 
     return myList.Skip(fetch.Skip).Take(fetch.Take).AsQueryable(); 
+3

Вы, вероятно, следует описать, что вы надеются отфильтровать. например может показать результат, который вы ожидаете получить, и что этот запрос (неправильно?) дает вам. – failedprogramming

ответ

0

Использование различных, пожалуйста, переопределить Equals и GetHashCode в InvoiceReceiveShipmentVM

public class InvoiceReceiveShipmentVM 
{ 
    public override bool Equals(object obj) 
    { 
     if (obj is InvoiceReceiveShipmentVM == false) return false; 

     var invoice = (InvoiceReceiveShipmentVM)obj; 
     return invoice.InvoiceNumber == InvoiceNumber 
      && invoice.InvoiceType == InvoiceType 
      && invoice.InvoiceStatus == InvoiceStatus 
      && invoice.Lines == Lines 
      && invoice.Total == Total 
      && invoice.Carrier == Carrier; 
    } 
    public override int GetHashCode() 
    { 
     return InvoiceNumber.GetHashCode() 
      ^InvoiceType.GetHashCode() 
      ^InvoiceStatus.GetHashCode() 
      ^Lines.GetHashCode() 
      ^Total.GetHashCode() 
      ^Carrier.GetHashCode(); 
    } 
} 
Смежные вопросы