2

我有以下代码行:

var groups = inputRows.GroupBy(x => new { x.stateCIP, x.facultyRank });

我想将组传递给另一个类方法:

OutputFileWriter.write(groups);

但是,我不知道为 write 方法声明输入参数的类型,因为它不会采用 var。

public static void write(?????? groups)

我附上了一张当我将鼠标悬停在 var groups 区域时收到的消息的照片:在此处输入图像描述

4

5 回答 5

1

一种方法是创建一个具有两个属性的类,stateCIP 和facultyRank,然后使用它而不是创建您现在正在做的匿名类型。然后你可以将它而不是匿名类型传递给你的方法

所以代替 var groups = inputRows.GroupBy(x => new { x.stateCIP, x.facultyRank })

尝试

var groups = inputRows.GroupBy(x => new MyClass(StateCIP = x.stateCIP, FacultyRank = x.facultyRank });

那么你可以做

public static void write(IEnumerable<MyClass> groups)

或者,如果您想对仅对其进行迭代的组对象执行更多操作,例如在 Write 方法中从组中添加或删除项目,则在调用方法时将 IEnumerable 转换为 List 使用:

var groups = inputRows.GroupBy(x => new MyClass(StateCIP = x.stateCIP, FacultyRank = x.facultyRank }).ToList();

然后将您的方法写为

public static void write(IList<T> groups)
于 2012-04-03T21:31:53.327 回答
0

也许是这样的:

public class MyObject
{
     public string stateCIP { get; set; }
     public string facultyRank { get; set; }
}

像这样的调用:

var groups = inputRows.GroupBy(x => new MyObject()
{
    stateCIP= x.stateCIP,
    facultyRank= x.facultyRank
}).ToList();

然后是这样的功能:

public static void write(List<IGrouping<MyObject,YourTableEntity>> groups)
{
}
于 2012-04-03T21:36:16.460 回答
0

通过 like 方法的解决方案是通过 like

IEnumerable

例如,您可以编写如下内容:

public static void write(IEnumerable groups)

或者您可以将其模板化为:

public static void write<T>(IEnumerable<T> groups)
于 2012-04-03T21:37:32.403 回答
0

为了给予应有的荣誉,这是对蒂格兰答案的增强。

您的查询返回一个IEnumerable<IGrouping<'a, InputRow>>,因此如果您将匿名类型替换为类型参数(此处T),您的方法通常可以接受它。通过使用更具体的类型IEnumerable<T>(Tigran 的建议),您可以将序列的元素视为 IGrouping 对象:

public static void write<T>(IEnumerable<IGrouping<T, InputRow>> groups)
{
    foreach (var group in groups)
        foreach (var inputRow in group)
            //do something...
}

如果您不需要访问 Key 的成员(即匿名类型的实例),这将非常有效。在这里,您不需要它们,因为这些值在 InputRow 类型中也可用,正如查询表达式所暗示的那样。

于 2012-04-03T22:24:58.603 回答
0

如果您使用的是 .NET 4.0,并且不需要分组信息,因为它位于组内的各个项目中,您可以使用:

public static void write(IEnumerable<IEnumerable<InputRow>> groups)
于 2012-04-03T23:13:48.627 回答