2012-04-03 47 views
2

我有下面的代碼行:傳遞變量 - 未知類型

VAR組= inputRows.GroupBy(X =>新的{x.stateCIP,x.facultyRank});

我想通過組到另一個類方法:

OutputFileWriter.write(groups); 

不過,我不知道是什麼類型來聲明輸入參數的寫入方法,因爲它不會採取變種。

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

我已附上信息的照片,我得到當我將鼠標放在VAR組區域:enter image description here

+0

你們將如何使用「組」裏面的「寫「方法? – daniloquio 2012-04-03 21:27:40

+0

我將在foreach循環中遍歷它,該foreach循環有一個子for​​each循環來一次訪問一個組的項目。 – Baxter 2012-04-03 21:29:16

回答

1

一種方法是創建一個類有兩個屬性,在stateCIP和facultyRank然後用而不是創建一個你現在正在做的匿名類型。然後你就可以傳遞,而不是匿名類型的到你的方法

所以不是 VAR組= inputRows.GroupBy(X =>新{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的使用到列表:

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

,然後寫你的方法

public static void write(IList<T> groups) 
+0

編譯器不喜歡這些選項中的任何一個。 – Baxter 2012-04-03 21:35:54

+0

@ baxter:我意識到我提交答案的那一刻。它現在更新了。這應該工作。 – desigeek 2012-04-03 21:41:00

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) 
{ 
} 
0

該解決方案通過類似的方法是通過像

IEnumerable

例如,你可以寫這樣的事情:

public static void write(IEnumerable groups) 

或者您可以將其製作爲如下模板:

public static void write<T>(IEnumerable<T> groups) 
+0

+1爲我的答案提供靈感。更好的簽名是'寫入(IEnumerable >)' – phoog 2012-04-03 22:27:09

0

爲了給出應有的分數,這是Tigran答案的一個提升。

你的查詢返回一個IEnumerable<IGrouping<'a, InputRow>>,所以你的方法一般可以接受,如果你用類型參數替換匿名類型(這裏是T)。通過使用更具體的類型不僅僅是IEnumerable<T>(狄格蘭的建議),你會得到治療序列的元素作爲IGrouping對象:

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

這將很好地工作,如果你不需要訪問的成員密鑰(即匿名類型的實例)。在這裏,你不需要它們,因爲這些值也可以在InputRow類型中使用,如查詢表達式所暗示的。

0

如果您使用的是.NET 4.0,因爲它是在組內的單個項目,你可以使用這個你不需要的分組信息:

public static void write(IEnumerable<IEnumerable<InputRow>> groups)