2016-06-24 16 views
1

私はlinqで最大ではありませんが、選択した言語です。私はSQLのようなクエリを使用して記述しようとしています。標準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

に等しいとGetHashCodeメソッドをオーバーライドしてください除外したいと考えています。例えばたぶん期待している結果と、このクエリが(間違って)あなたに与えるものを表示してください。 – failedprogramming

答えて

0

の明確な使用して、あなたはおそらく何をあなたを記述する必要があります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(); 
    } 
} 
関連する問題