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;
}
我发现的每个示例都只显示了没有封闭功能的代码!
感谢您的帮助。 卡盘
答案 0 :(得分:1)
您可以返回dynamic
,它将在运行时声明一个具有两个属性的类型:area
和name
:
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;
}
}