Возвратный список с использованием выбора нового в 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();
}
}
Если я меняю его следующим образом:
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.
Спасибо.
Ответы
Ответ 1
Метод не может вернуть анонимный тип. Он должен быть таким же, как тип, определенный в типе возвращаемого метода. Проверьте подпись 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();
}
}
Ответ 2
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>();
}
}
Ответ 3
Вы не можете возвращать анонимные типы из класса... (ну, вы можете, но сначала вы должны перенести их на объект, а затем использовать отражение на другой стороне, чтобы получить данные снова), поэтому вам нужно создать небольшой класс для хранения данных внутри.
class ProjectNameAndId
{
public string Name { get; set; }
public string Id { get; set; }
}
Затем в вашем заявлении LINQ:
select new ProjectNameAndId { Name = pro.ProjectName, Id = pro.ProjectId };
Ответ 4
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>();
}
}
Ответ 5
То, что возвращается, является анонимным типом, поэтому создайте новый класс с 2 полями
class BasicProjectInfo {
string name;
string id;
}
и верните new BasicProjectInfo(pro.ProjectName, pro.ProjectId);
. Вы в этом случае вернете a List<BasicProjectInfo>
Ответ 6
Значение возвращаемого метода должно быть List<Project>
.
Используя select new
, вы создаете экземпляр анонимного типа вместо Project
.
Ответ 7
Вы можете сделать это следующим образом:
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
попробуйте это решение для меня своей рабочей
public List<ProjectInfo> GetProjectForCombo()
{
using (MyDataContext db = new MyDataContext
(DBHelper.GetConnectionString()))
{
return (from pro in db.Projects
select new { query }.query).ToList();
}
}
Ответ 9
Вы создаете новый тип объекта, поэтому он анонимный. Вы можете вернуть динамику.
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();
}
}