program tip

LINQ에서 새로 선택을 사용하여 목록 반환

radiobox 2021. 1. 6. 07:59
반응형

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 만 반환 할 수있는 방법을 알려주세요.

감사.


메서드는 익명 형식을 반환 할 수 없습니다. 메소드 반환 유형에 정의 된 유형과 동일해야합니다. 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();
    }
}

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

}


클래스에서 익명 형식을 반환 할 수 없습니다 ... (글쎄요, 할 수 있지만 먼저 객체로 캐스팅 한 다음 다른 쪽에서 리플렉션을 사용하여 데이터를 다시 가져와야합니다) 그래서 작은 클래스를 만들어야합니다. 포함 할 데이터.

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

What is being returned is an anonymous type so create a new class with 2 fields

class BasicProjectInfo {
   string name;
   string id;
}

and return new BasicProjectInfo(pro.ProjectName, pro.ProjectId);. You method in this case will return a List<BasicProjectInfo>


Your method's return value has to be a List<Project>.

Using select new you are creating an instance of an anonymous type, instead of a Project.


try this solution for me its working

     public List<ProjectInfo> GetProjectForCombo()
      {
    using (MyDataContext db = new MyDataContext 
    (DBHelper.GetConnectionString()))
         {
        return  (from pro in db.Projects
                    select new { query  }.query).ToList();
        }
      }

You can do it as following:

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

You're creating a new type of object therefore it's anonymous. You can return a 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();
    }
}

ReferenceURL : https://stackoverflow.com/questions/6370028/return-list-using-select-new-in-linq

반응형