2011-04-23 75 views
0

我不知道如何擺脫這個錯誤?IEnumerable <T>用匿名方法

錯誤1使用泛型類型'System.Collections.Generic.IEnumerable'需要1個類型參數C:\ Users \ huzaifa.gain \ documents \ visual studio 2010 \ Projects \ VendInvoiceImport \ VendInvoiceImport \ Program.cs 34 24 VendInvoiceImport

private static IEnumerable<string , string > DistinctInvoiceNumber(DataTable VendorInvoiceStagingTable) 
     { 
      var InvoiceLinecollection = VendorInvoiceStagingTable.AsEnumerable().Select(t => new { number = t.Field<string>(VendInvoice.Number),LineNumber = t.Field<string>(VendInvoice.LineNumber)}).Distinct(); 
     return InvoiceLinecollection; 
     } 

enter image description here

+3

請勿發佈內嵌圖像。將有問題的代碼發佈爲文本,以便可讀。 – Joe 2011-04-23 12:19:23

回答

4

您的Linq查詢返回一個匿名類型的序列,但方法不能返回匿名類型。您有幾種選擇:

  • 返回IEnumerable<Tuple<string, string>>

    private static IEnumerable<Tuple<string, string>> DistinctInvoiceNumber(DataTable VendorInvoiceStagingTable) 
    { 
        var InvoiceLinecollection = VendorInvoiceStagingTable 
                .AsEnumerable() 
                .Select(t => Tuple.Create(t.Field<string>(VendInvoice.Number), t.Field<string>(VendInvoice.LineNumber))) 
                .Distinct(); 
        return InvoiceLinecollection; 
    } 
    
  • 回報作爲另一個答案建議(假設你的查詢不返回重複鍵)

    private static IDictionary<string, string> DistinctInvoiceNumber(DataTable VendorInvoiceStagingTable) 
    { 
        var InvoiceLinecollection = VendorInvoiceStagingTable 
                .AsEnumerable() 
                .Select(t => Tuple.Create(t.Field<string>(VendInvoice.Number), t.Field<string>(VendInvoice.LineNumber))) 
                .Distinct() 
                .ToDictionary(t => t.Item1, t => t.Item2); 
        return InvoiceLinecollection; 
    } 
    
  • 一個IDictionary<string, string>用2個字符串屬性爲此創建一個類並返回該類的序列

    private static IEnumerable<InvoiceLine> DistinctInvoiceNumber(DataTable VendorInvoiceStagingTable) 
    { 
        var InvoiceLinecollection = VendorInvoiceStagingTable 
                .AsEnumerable() 
                .Select(t => new InvoiceLine(t.Field<string>(VendInvoice.Number), t.Field<string>(VendInvoice.LineNumber))) 
                .Distinct(); 
        return InvoiceLinecollection; 
    } 
    
+0

+1爲所有可能的解決方案。 – Euphoric 2011-04-23 13:02:41

1

爲什麼你不使用Dictionary<string, string>呢?

private static Dictionary<string , string > DistinctInvoiceNumber(DataTable VendorInvoiceStagingTable) 
     { 
      var InvoiceLinecollection = VendorInvoiceStagingTable.AsEnumerable().Select(t => new { number = t.Field<string>(VendInvoice.Number),LineNumber = 
       t.Field<string>(VendInvoice.LineNumber)}).ToDictionary(); 
      return InvoiceLinecollection; 
      } 
+0

錯誤無法將類型'System.Collections.Generic.IEnumerable '隱式轉換爲'System.Collections.Generic.Dictionary '。存在明確的轉換(是否缺少轉換?) – Gainster 2011-04-23 12:21:40

+0

然後,您的返回類型應該是Dictionary 或IDictionary CRice 2011-04-23 12:23:48

+0

如何使用上面的代碼做到這一點?編輯了 – Gainster 2011-04-23 12:24:34