我有以下代码行:
var groups = inputRows.GroupBy(x => new {x.stateCIP,x.facultyRank});
我想将组传递给另一个类方法:
OutputFileWriter.write(groups);
但是,我不知道为write方法声明输入参数的类型,因为它不会占用var。
public static void write(?????? groups)
我附上了鼠标悬停在var群组区域时收到的消息照片:
答案 0 :(得分: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)
答案 1 :(得分: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)
{
}
答案 2 :(得分:0)
像方法一样传递的解决方案就像
一样传递 IEnumerable
public static void write(IEnumerable groups)
或者你可以模仿:
public static void write<T>(IEnumerable<T> groups)
答案 3 :(得分:0)
为了给予应有的信用,这是Tigran答案的增强。
您的查询返回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类型中使用,如查询表达式所暗示的那样。
答案 4 :(得分:0)
如果您使用的是.NET 4.0,并且您不需要分组信息,因为它位于组中的各个项目中,您可以使用它:
public static void write(IEnumerable<IEnumerable<InputRow>> groups)