使用LINQ中的select new返回列表

Sam*_*ami 56 c# linq

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我改变它:

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

        return query.ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后它工作正常没有错误.

能告诉我,我怎样才能返回ProjectId和ProjectName.

谢谢.

Muh*_*han 113

方法不能返回匿名类型.它必须与方法返回类型中定义的类型相同.检查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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它有效,但不正确.您承诺将整个对象传递给被调用者,但您只是在其中提供部分信息.只有方法的实现才能揭示出设计不好的真相. (5认同)
  • 嗨哈桑,谢谢你的回复,这真的很有帮助.我必须知道,如果不创建新类,我们也可以获得所需的功能.这样好吗?这对我很好.public List <Project> GetProjectForCombo(){using(MyDataContext db = new MyDataContext(DBHelper.GetConnectionString())){var query = from pro in db.Projects select new Project(){ProjectName = pro.ProjectName,ProjectId = pro. ProjectId}; return query.ToList(); }} (2认同)

Joh*_*ers 9

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>();
   }
Run Code Online (Sandbox Code Playgroud)

}

  • query.ToList &lt;Object&gt;(); 为我工作从linq查询的集合列表。这会从选择新的{}中投射整个对象。谢谢。 (2认同)

Col*_*kay 5

你不能从类中返回匿名类型...(嗯,你可以,但你必须先将它们转换为对象,然后再使用另一侧的反射来重新获取数据)所以你必须创建一个小类要包含的数据.

class ProjectNameAndId
{
    public string Name { get; set; }
    public string Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的LINQ语句中:

select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId };
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是挑剔,但所以问题有成为有价值的可销售资源的趋势,并认为世界将受益于我的小评论:) (2认同)