使用LINQ中的select new返回列表

这是我的方法,它给了我错误。

public List<Project> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new { pro.ProjectName, pro.ProjectId }; return query.ToList(); } } 

如果我改变它:

 public List<Project> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select pro; return query.ToList(); } } 

那么它工作正常没有错误。

你可以让我知道,我如何只返回ProjectId和ProjectName。

谢谢。

方法不能返回匿名types。 它必须与方法返回types中定义的types相同。 检查GetProjectForCombo的签名并查看指定的返回types。

创build一个具有所需属性的类ProjectInfo,然后在新的expression式中创buildProjectInfotypes的对象。

 class ProjectInfo { public string Name {get; set; } public long Id {get; set; } } public List<ProjectInfo> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new ProjectInfo(){ Name = pro.ProjectName, Id = pro.ProjectId }; return query.ToList(); } } 
 public List<Object> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = db.Project .Select<IEnumerable<something>,ProjectInfo>(p=> return new ProjectInfo{Name=p.ProjectName, Id=p.ProjectId); return query.ToList<Object>(); } 

}

你不能从一个类中返回匿名types…(好吧,你可以,但是你必须先把它们投到对象上,然后在另一边使用reflection来重新获取数据),所以你必须创build一个小类要包含的数据。

 class ProjectNameAndId { public string Name { get; set; } public string Id { get; set; } } 

然后在你的LINQ声明中:

 select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId }; 
 public List<Object> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new {pro.ProjectName,pro.ProjectId}; return query.ToList<Object>(); } } 

什么是返回是一个匿名types,所以创build一个新的类有2个字段

 class BasicProjectInfo { string name; string id; } 

并返回new BasicProjectInfo(pro.ProjectName, pro.ProjectId); 。 你在这种情况下的方法将返回一个List<BasicProjectInfo>

您的方法的返回值必须是List<Project>

使用select new你创build一个匿名types的实例,而不是一个Project

你可以这样做:

 class ProjectInfo { public string Name {get; set; } public long Id {get; set; } ProjectInfo(string n, long id) { name = n; Id = id; } } public List<ProjectInfo> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new ProjectInfo(pro.ProjectName,pro.ProjectId); return query.ToList<ProjectInfo>(); } } 

尝试这个解决scheme为我的工作

  public List<ProjectInfo> GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { return (from pro in db.Projects select new { query }.query).ToList(); } } 

你正在创build一个新types的对象,因此它是匿名的。 你可以返回一个dynamic的。

 public dynamic GetProjectForCombo() { using (MyDataContext db = new MyDataContext (DBHelper.GetConnectionString())) { var query = from pro in db.Projects select new { pro.ProjectName, pro.ProjectId }; return query.ToList(); } }