2012-08-06 4 views
3

아래 코드를 속기 linq로 변환하려고하지만 가능하면 확실하지 않습니다. Linq를 사용하여보다 우아한 방법이 있습니까? 합병증은 AllowedRoles를 분할하고 IsUserInRole 인 경우 각각을 검사하는 중첩 된 루프라는 점에서 발생합니다.linq 루프에서 이전 값을 얻으시겠습니까?

bool allowed = RoleManager.IsUserUnrestricted(userId); 
    if (!allowed) 
    { 
     foreach (var item in element.AllowedRoles.Split(',')) 
     { 
      if (roleManager.IsUserInRole(userId, item.Trim())) 
      { 
       allowed = true; 
       break; 
      } 
     } 
    } 

    if (allowed) 
    { 
     AddWidget(element.Name); 
    } 

답변

3

이 시도 :

if (RoleManager.IsUserUnrestricted(userId) 
|| element.AllowedRoles.Split(',') 
      .Any(item => roleManager.IsUserInRole(userId, item.Trim()))) { 
    ... 
} 

아이디어는 루프없이 일치하는 첫 번째 항목을 찾을 LINQ의 Any 기능을 사용하는 것입니다.

+0

거의 동일한 대답, 1 분 남았습니다 :-) – MikeKulls

+2

@MikeKulls 우리는 운이 좋았습니다. Jon Skeet은 잠 들어 있습니다. 그는 3-4 분 전에 우리보다 앞서있을 것입니다. :) – dasblinkenlight

1

이와 비슷한?

if(RoleManager.IsUserUnrestricted(userId) || element.AllowedRoles.Split(',').Any(r=> roleManager.IsUserInRole(userId,r.Trim())) 
{ 
     AddWidget(element.Name); 
} 
1

당신이 같은 것을 사용할 수 있습니다

element.AllowedRoles.Split(',').Any(r => roleManager.IsUserInRole(userId, r.Trim())) 

가 BTW, 내가 중첩 루프를 볼 수 없습니다, 당신이 게시 코드에 하나의 루프가있다. 요소 모음이 있습니까? 또한, 왜 귀하의 질문 제목은 "이전 값을 linq 루프에서 얻을?" 나는 이것에 대한 필요성을 보지 못한다.

관련 문제