如何从LINQ合并列表创建文本文件?

时间:2012-01-25 16:24:16

标签: c# linq linq-to-sql join

我有2个LINQ-to-SQL列表,我使用以下方法将它们合并到1个列表中:

var mergedList = List1.Union(List2);

我假设Union命令将消除列表中的所有dupes。是对的吗?无论如何,我正在尝试将合并列表的内容写入csv文件。当我尝试调用列表时出现错误:

WriteToCSVFile cf = new WriteToCSVFile(mergedList);

这就是我构建课程的方式:

public WriteToCSVFile(IEnumerable<T> mergedList)

我在这里做错了什么?

不过,这是我得到的错误:

The type arguments for method 'WriteToCSVFile.WriteToCSVFile(System.Collections.Generic.IEnumerable<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 

如果您需要更多信息,请告诉我们。并提前感谢。

3 个答案:

答案 0 :(得分:3)

你需要让你的班级通用

public class WriteToCSVFile<T>
{
    public WriteToCSVFile(IEnumerable<T> mergedList)
    {

    }

    ...
}

并且在调用它时指定泛型参数类型,因为无法从构造函数推断泛型类型:

var cf = new WriteToCSVFile<TheTypeOfElementsInYourList>(mergedList);

类型推断仅适用于方法,因此您可以编写extension method

public static class CsvExtensions
{
    public static void WriteToCSVFile<T>(this IEnumerable<T> list)
    {
        ...
    }
}

然后:

mergedList.WriteToCSVFile();

哦,我真诚地希望你是not rolling your own CSV parser,是吗?

答案 1 :(得分:0)

匿名类型不能用作泛型方法的类型参数。

答案 2 :(得分:0)

由于您的方法是通用方法,我猜您传递非通用列表。我想你的列表类型定义为

List list1= new List();

应该定义为

List<yourType> list1 = new List<yourType>();