Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到sql返回组(按方法的结果)_C#_Linq To Sql - Fatal编程技术网

C# LINQ到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

如何创建一个方法,将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
                          {
                              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将显示类型变量的类型。