ProgramingTip

LINQ select 문에서 Lambda를 사용하는 방법

bestdevel 2021. 1. 9. 16:28
반응형

LINQ select 문에서 Lambda를 사용하는 방법


람다 함수를 사용하여 상점을 선택하고 결과를 SelectListItem으로 변환하여 처리 할 수 ​​있습니다. 그러나 " 선택 절의 작성 유형이 "오류가 발생합니다.

IEnumerable<SelectListItem> stores =
    from store in database.Stores
    where store.CompanyID == curCompany.ID
    select (s => new SelectListItem { Value = s.ID, Text = s.Name} );
ViewBag.storeSelector = stores;

내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집하다 :

또한이 상황에서 Int를 String으로 어떻게 변환합니까? 다음은 작동하지 않습니다.

select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );

편집 2 :

Int to String 변환을 알아 내십시오. int2string 변환 함수를 포함하는 것을 기억하는 것은 마이크로 소프트의 전형적인 일입니다. 다음은 작동하는 구문으로 모든 사람이 사용하는 실제 해결 방법입니다.

select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };

이 상황을 터무니 부르는 것은 과소 평가입니다.


LINQ 쿼리 식 사용

 IEnumerable<SelectListItem> stores =
        from store in database.Stores
        where store.CompanyID == curCompany.ID
        select new SelectListItem { Value = store.Name, Text = store.ID };

 ViewBag.storeSelector = stores;

또는 람다 식과 함께 LINQ 확장 메소드 사용

 IEnumerable<SelectListItem> stores = database.Stores
        .Where(store => store.CompanyID == curCompany.ID)
        .Select(store => new SelectListItem { Value = store.Name, Text = store.ID });

 ViewBag.storeSelector = stores;

모든 Lambda 구문을 사용하지 않는 이유는 무엇입니까?

database.Stores.Where(s => s.CompanyID == curCompany.ID)
               .Select(s => new SelectListItem
                   {
                       Value = s.Name,
                       Text = s.ID
                   });

쿼리 식 구문과 "일반"람다 식 구문을 혼합하려고합니다. 다음 중 하나를 사용할 수 있습니다.

IEnumerable<SelectListItem> stores =
        from store in database.Stores
        where store.CompanyID == curCompany.ID
        select new SelectListItem { Value = store.Name, Text = store.ID};
ViewBag.storeSelector = stores;

또는 :

IEnumerable<SelectListItem> stores = database.Stores
        .Where(store => store.CompanyID == curCompany.ID)
        .Select(s => new SelectListItem { Value = s.Name, Text = s.ID});
ViewBag.storeSelector = stores;

당신이하려는 것처럼 두 가지를 섞지 않습니다.


Lambda 결과

var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();

Lambda 사용 사용 :

  1. 결과를 바인딩 할 특정 클래스가없는 경우 :

     var stores = context.Stores.Select(x => new { x.id, x.name, x.city }).ToList();
    
  2. 특정 클래스가있는 경우 결과를 바인딩해야합니다.

    List<SelectListItem> stores = context.Stores.Select(x => new SelectListItem { Id = x.id, Name = x.name, City = x.city }).ToList();
    

간단한 LINQ 식 사용 :

  1. 결과를 바인딩 할 특정 클래스가없는 경우 :

    var stores = (from a in context.Stores select new { x.id, x.name, x.city }).ToList();
    
  2. 특정 클래스가있는 경우 결과를 바인딩해야합니다.

    List<SelectListItem> stores = (from a in context.Stores select new SelectListItem{ Id = x.id, Name = x.name, City = x.city }).ToList();
    

참조 URL : https://stackoverflow.com/questions/15577890/how-to-use-lambda-in-linq-select-statement

반응형