linq创建新的匿名对象;如何声明返回类型

时间:2018-07-15 17:30:45

标签: c# linq return-type anonymous

linq表达式的细节并不重要,除了它会创建一个新的未命名对象:

 select new { ... }

因此,我没有该函数的返回类型。必须有一个通用的无类型类型,例如Javascript的“ any”。

   public ??? Get(int id)
    {
        var hisGrade = (from p in ctx.Students
                        where p.StudentID == id
                        select new { area = p.Grade.Section, name = p.Grade.GradeName }).FirstOrDefault();
        return hisGrade;
    }

我发现的每个示例都只显示了没有封闭功能的代码!

感谢您的帮助。 卡盘

2 个答案:

答案 0 :(得分:1)

您可以返回dynamic,它将在运行时声明一个具有两个属性的类型:areaname

   public dynamic Get(int id)
    {
        var hisGrade = (from p in ctx.Students
                        where p.StudentID == id
                        select new { area = p.Grade.Section, name = p.Grade.GradeName }).FirstOrDefault();
        return hisGrade;
    }

因此,您可以访问返回的对象的成员,但是会在编译时错过IntelliSense和类型检查:

var name = Get(1).name;

答案 1 :(得分:1)

您是否假设它总是必须是Select调用返回的匿名类型?你会错的。

public struct MyType
{
    public string Area { get; set; }

    public string Name { get; set; }
}

class Class1
{
    public MyType Get(int id)
    {
        var hisGrade = (from p in ctx.Students
                        where p.StudentID == id
                        select new MyType{ Area = p.Grade.Section, Name = p.Grade.GradeName }).FirstOrDefault();
        return hisGrade;
    }
}