如何创建一个方法来将LINQ中的组结果返回到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;
}
我似乎无法定义正确的返回类型。我认为这是因为它是一种匿名类型,但还没有解决它。我需要将其转换为列表或其他内容吗?
结果只会用于填充组合框。
答案 0 :(得分:4)
您不能*返回匿名类型。
您需要确定查询返回的类型,并具体返回,或者您可以重命名方法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
- 但除非你有充分的理由,否则你可能希望尽可能使用命名类型。
答案 1 :(得分:1)
你并没有真正返回'group by'结果 - 你只是返回一个常规的LINQ集合(在这种情况下,IEnumerable<Division>
)。正如Iain指出的那样,你可以使用.Distinct运算符获得相同的结果,而不是分组,然后从这些组中进行选择。
如果您确实想要返回实际的组结果,可能会将结果集转换为Dictionary<Key, List<Element>>
- 它将无法原生返回该类型,但IGrouping
界面似乎可能与此结构同构。
顺便说一下,当我需要想象一个IGrouping
结构时,我想象一个字典,其中每个键/值对是一个组,
答案 2 :(得分:0)
LINQ是“懒惰的”。您需要执行ToList()
(或任何其他appropriet方法)并获得IEnumerable<T>
。 Read this关于延迟加载。