C# LINQ到sql返回组(按方法的结果)
如何创建一个方法,将LINQ中group by的结果返回到sql,如下面的方法:C# LINQ到sql返回组(按方法的结果),c#,linq-to-sql,C#,Linq To Sql,如何创建一个方法,将LINQ中group by的结果返回到sql,如下面的方法: internal SomeTypeIDontKnow GetDivisionsList(string year) { var divisions = from p in db.cm_SDPs where p.acad_period == year group p by new
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;
}
我似乎无法定义正确的返回类型。我想这是因为它是匿名类型,但我还没有意识到这一点。我需要把它转换成列表还是什么
结果将仅用于填充组合框。LINQ是懒惰的。您需要使用ToList或任何其他适当的方法来获取IEnumerable。关于延迟加载。LINQ是延迟加载。您需要使用ToList或任何其他适当的方法来获取IEnumerable。关于延迟加载。您不能*返回匿名类型 您需要计算出查询返回的类型,并具体返回该类型,或者您可以重命名方法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;
}
编辑:*您可以,只是没有用-您必须返回对象。见:-
-但是,除非有充分的理由,否则您可能希望尽可能使用命名类型。您不能*返回匿名类型 您需要计算出查询返回的类型,并具体返回该类型,或者您可以重命名方法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;
}
编辑:*您可以,只是没有用-您必须返回对象。见:-
-但是,除非您有充分的理由,否则您可能希望尽可能使用命名类型。您并不是真正返回“分组依据”结果-在本例中,您只是返回一个常规LINQ集合,即IEnumerable。正如Iain指出的那样,使用.Distinct运算符可以获得相同的结果,而不是分组然后从这些组中进行选择 如果您确实希望返回实际的组结果,您可能会将结果集转换为字典-它无法以该类型本机返回,但iGroup接口似乎可能与此结构同构 对于顺序词,当我需要描绘一个iGroup结构时,我会描绘一个字典,其中每个键/值对都是一个组,带有 表示GROUPBY子句中不同值的每个键 每个值表示与Group By子句匹配的原始集合中的元素,即组的成员。
实际上,您并没有返回“groupby”结果——在本例中,您只是返回一个常规的LINQ集合,即IEnumerable。正如Iain指出的那样,使用.Distinct运算符可以获得相同的结果,而不是分组然后从这些组中进行选择 如果您确实希望返回实际的组结果,您可能会将结果集转换为字典-它无法以该类型本机返回,但iGroup接口似乎可能与此结构同构 对于顺序词,当我需要描绘一个iGroup结构时,我会描绘一个字典,其中每个键/值对都是一个组,带有 表示GROUPBY子句中不同值的每个键 每个值表示与Group By子句匹配的原始集合中的元素,即组的成员。
谢谢你现在的帮助。我知道我可以在方法中绑定,但希望尽可能地将类与UI分开。感谢现在的帮助。我知道我可以在方法中绑定,但希望尽可能将类与UI分开。您应该能够将鼠标悬停在返回行上的分区名称上,intellisense将显示变量的类型。您应该能够将鼠标悬停在返回行上的分区名称上,intellisense将显示类型变量的类型。