Подтвердить что ты не робот

Возвратный список с использованием выбора нового в 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.

Спасибо.

4b9b3361

Ответ 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();
    }
}