这是我的方法,它给了我错误。
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。
感谢。
答案 0 :(得分:100)
方法无法返回匿名类型。它必须与方法返回类型中定义的类型相同。检查GetProjectForCombo的签名并查看您指定的返回类型。
创建一个具有必需属性的ProjectInfo类,然后在新表达式中创建ProjectInfo类型的对象。
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();
}
}
答案 1 :(得分:8)
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>();
}
}
答案 2 :(得分:5)
你不能从类中返回匿名类型...(嗯,你可以,但你必须先将它们转换为对象,然后再使用另一侧的反射来重新获取数据)所以你必须创建一个数据的小类,包含在其中。
class ProjectNameAndId
{
public string Name { get; set; }
public string Id { get; set; }
}
然后在你的LINQ声明中:
select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId };
答案 3 :(得分:3)
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>();
}
}
答案 4 :(得分:1)
返回的是匿名类型,因此创建一个包含2个字段的新类
class BasicProjectInfo {
string name;
string id;
}
并返回new BasicProjectInfo(pro.ProjectName, pro.ProjectId);
。在这种情况下,您的方法将返回List<BasicProjectInfo>
答案 5 :(得分:1)
您方法的返回值必须是List<Project>
。
使用select new
您正在创建一个匿名类型的实例,而不是Project
。
答案 6 :(得分:1)
为我的工作尝试这个解决方案
public List<ProjectInfo> GetProjectForCombo()
{
using (MyDataContext db = new MyDataContext
(DBHelper.GetConnectionString()))
{
return (from pro in db.Projects
select new { query }.query).ToList();
}
}
答案 7 :(得分:0)
您可以按照以下方式执行此操作:
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>();
}
}
答案 8 :(得分:-1)
您正在创建一种新类型的对象,因此它是匿名的。您可以返回动态。
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();
}
}