使用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(); } }