2016-06-24 18 views
1

Ich bin nicht der größte mit Linq, aber ist die Sprache der Wahl. Ich versuche, die Abfrage mit SQL-Like zu schreiben. Standard scenerio Ich habe eine Rechnung und diese Rechnung hatte Rechnungsdetails. Beim Zusammenfügen der Tabellen werden natürlich die Rechnungen mit mehreren Details wiederholt. In der Standard-SQL konnte ich distinct oder group by verwenden. Ich habe versucht, dem mit linq zu folgen, aber Fehler zu bekommen, oder es gerade heraus filtert.Entfernen Sie doppelte Zeilen mit Linq-Abfrage

Hier meine Frage ist

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

ich auch versucht habe:

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

Sie wahrscheinlich das, was Sie beschreiben, sollten hoffen, herauszufiltern. z.B. Vielleicht zeigen Sie das Ergebnis, das Sie erwarten, und was diese Abfrage (falsch?) Ihnen gibt. – failedprogramming

Antwort

0

verschieden sein, bitte Equals und GetHashCode

in InvoiceReceiveShipmentVM außer Kraft setzen
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(); 
    } 
} 
Verwandte Themen