嗯,DoIt
不知道result
有一個名爲ShortName
的屬性,因爲它的類型爲object
。您可以創建一個具體的類來保存結果,使用反射或使用dynamic
。請注意,無論哪種方式,GetData
確實會返回IEnumerable<T>
,其中T
目前是匿名類型。
使用具體類:
public class Foo {
public string ShortName { get; set; }
public int SCount { get; set; }
public string DisplayText { get; set; }
}
public IEnumerable<Foo> GetData() {
var table = GetDataTable();
var view = table.DefaultView;
//..... more code
var query = from row in view.ToTable().AsEnumerable()
group row by row.Field<string>("ShortName") into grouping
select new Foo
{
ShortName = grouping.Key,
SCount = grouping.Sum(count => count.Field<int>("ProfCount")),
DisplayText = string.Empty
};
return query;
}
public void DoIt() {
var result = GetData();
foreach(var item in result) {
Console.WriteLine(item.ShortName);
}
}
使用反射:
public IEnumerable GetData() {
var table = GetDataTable();
var view = table.DefaultView;
//..... more code
var query = from row in view.ToTable().AsEnumerable()
group row by row.Field<string>("ShortName") into grouping
select new Foo
{
ShortName = grouping.Key,
SCount = grouping.Sum(count => count.Field<int>("ProfCount")),
DisplayText = string.Empty
};
return query;
}
public void DoIt() {
var result = GetData();
PropertyInfo property = result.First().GetType().GetProperty("ShortName");
foreach(var item in result) {
string shortName = property.GetValue(item, null);
Console.WriteLine(shortName);
}
}
可以使用現有的類型嗎?我寧願在這裏使用數據列。 – 2010-11-17 17:54:24
您絕對可以使用現有的類型。你不能在局部範圍外使用匿名類型。你只需要一個公開可見的類型,因爲你從公共方法返回它。 (如果方法是私有的,顯式類型可以是私有嵌套類。) – 2010-11-17 17:56:07
@James Kovacs:「你不能在局部範圍外使用匿名類型。」這是錯誤的(是的,MSDN上有這樣的錯誤陳述)。 – jason 2010-11-17 18:02:55