2014-11-14 3 views
-1

누구든지 linq 문이 몇 줄의 코드를 얻는 데 도움이 될 수 있습니까? 린크 성명에 익숙하지 않고 누군가가 나를 도와 줄 수 있다면 크게 감사 할 것입니다.Linq에 C# Xamarin 코드

var searchFor = constraint.ToString(); 
for (int i = 0; i < allUserList.Count; i++) { 
    if (allUserList[i].FirstName.ToLower().Contains(searchFor) || 
     allUserList[i].LastName.ToLower().Contains(searchFor)) { 
     userInfoList.Add(allUserList[i]); 
    } 
} 

답변

1

당신은 AddRange를 사용할 수 있습니다

userInfoList.AddRange(allUserList.Where(a => 
         a.FirstName.ToLower().Contains(searchfor) ||   
         a.LastName.ToLower().Contains(searchfor)); 

WhereIEnumerable<UserObject>를 반환합니다 AddRange가 userInfoList이 메모리에서입니다

+0

ToLower는 함수이므로 중괄호가 필요합니다. – WebFreak001

+0

@ WebFreak001 righto – Jonesopolis

0

채우는 데 사용할 수있는 - 정확한 구문에 대한 어떠한 보장 :

userInfoList = (from x in allUserList 
    where x.FirstName.ToLower().Contains(searchFor) || 
    x.LastName.ToLower().Contains(searchFor) select x).ToList(); 
+2

그는 목록에 항목을 추가하고 쿼리 결과로 바꾸지 않으려 고합니다. – Robert

1

첫째로, 나는 내가 IndexOf(...) != -1을 사용하고

private bool UserNameContains(<your user name> user, string searchFor) 
{ 
    return user.FirstName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1 || 
      user.LastName.IndexOf(searchFor, StringComparision.OrdinalIgnoreCase) != -1; 
} 

주의 사항 : Linq에를 사용할 때 코드가 훨씬 더 쉽게 읽을 수 있도록하기 때문에 별도의 방법으로 condition statement을 유타. Contains은 내부적으로 동일한 방법을 사용하지만 StringComparision.Ordinal 인수를 사용하기 때문입니다. 케이스에 대해 신경 쓰지 않는다고 가정하면 IndexOf(..., StringComparision.OrdinalIgnoreCase)을 사용하는 것이 훨씬 더 좋습니다. 이렇게하면 searchFor에 위쪽 문자가 포함 된 경우 문자열 문자를 낮추지 않고 버그를 방지 할 수 있습니다.

userInfoList.AddRange(allUserList.Where(user => this.UserNameContains(user, searchFor)); 

또는 userInfoList 새로운 빈리스트 인 경우, 당신은 변수 선언에 전체 논리를 이동할 수 있습니다 :

그런 다음 당신이 할 필요가있다

var userInfoList = allUserList.Where(user => this.UserNameContains(user, searchFor).ToList(); 

참고 추가한다 using System.Linq; 지시문을 사용하여 Linq 확장을 사용할 수 있습니다.