2011-04-23 33 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