的LINQ to SQL返回组由法
结果如何创建由LINQ返回一组结果为sql如下面的一个方法:的LINQ to SQL返回组由法
internal SomeTypeIDontKnow GetDivisionsList(string year)
{
var divisions = from p in db.cm_SDPs
where p.acad_period == year
group p by new
{
p.Division
} into g
select new
{
g.Key.Division
};
return divisions;
}
我似乎无法定义正确的返回类型。我认为这是因为它是一个匿名类型,但还没有得到我的头。我是否需要将其转换为列表或其他内容?
结果只会用于填充组合框。
你不能*返回一个匿名类型。
要么你需要弄清楚你的查询返回的是什么类型,并且要特别返回,或者你可以重命名方法BindDivisionsList(...)并在方法内执行你的数据绑定。
我建议你使用前(使你的类型在这里一些假设): -
internal IEnumerable<Division> GetDivisionsList(string year)
{
IEnumerable<Division> divisions =
from p in db.cm_SDPs
where p.acad_period == year
group p by new
{
p.Division
} into g
select g.Key.Division;
return divisions;
}
或交替(我一般会做这种方式): -
internal IEnumerable<Division> GetDivisionsList(string year)
{
IEnumerable<Division> divisions =
db.cm_SPDs.Where(x => x.acad_period == year)
.Select(x => x.Division)
.Distinct();
return divisions;
}
编辑: *你可以,只是没有用 - 你必须返回“对象”。请参阅: -
http://msdn.microsoft.com/en-us/library/bb397696.aspx
- 但除非你有一个很好的理由,你可能想用命名的类型来工作时,您可以。
感谢您对现在排序的帮助。我知道我可以在方法中绑定,但希望尽可能将类保持与UI分开。 – PeteT 2010-03-25 13:54:11
你不是真的返回'group by'结果 - 你只是返回一个常规的LINQ集合(在这种情况下,IEnumerable<Division>
)。正如Iain指出的那样,您可以使用.Distinct运算符获得相同的结果,而不是分组,然后从这些组中进行选择。
如果你想返回实际的团体成绩方面,你可能结果集转换为Dictionary<Key, List<Element>>
- 这将无法返回原生的那种类型,但IGrouping
界面似乎是可能同构这个结构。
为了换句话说,当我需要图象的IGrouping
结构,I画面的字典,其中每个键/值对是一组,与
- 每个键表示所述组的不同值By子句
- 每个值都表示原始集合中与Group By子句匹配的元素,即组的成员。
您应该可以将鼠标移到返回行的“divisions”名称上,智能感知将显示变量的类型。 – 2010-03-25 14:19:48