2011-12-07 3 views
1

안녕하세요 저는 엔티티 프레임 워크와 LinQ를 사용하고 있습니다. 사용자라는 테이블 개체가 있습니다. 나는 사용자 ID라는 목록을 가지고있다. 문자열에 ID가 들어있는 모든 사용자를 찾아야합니다. 나는 linq 쿼리에 포함 된

select * from users where userid in (userids); 

내가이

var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o); 

처럼이 문제를 해결하려고 ... 다음 작업을 할 필요가 있지만, 컴파일 오류를 제공합니다. 어떻게 해결할 수 있을까요?

+3

귀하의 코드 대신 기간의 쉼표를 사용하며, 잘못된 경우이다. C#은 대소 문자를 구분합니다. –

답변

0

이 사용하려고 :

protected Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values) 
{ 
      if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); } 

      if (null == values) { throw new ArgumentNullException("values"); } 

      ParameterExpression p = valueSelector.Parameters.Single(); 

      if (!values.Any()) 
      { 
       return e => false; 
      } 

      var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue)))); 

      var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal)); 

      return Expression.Lambda<Func<TElement, bool>>(body, p); 
} 

호출이 같은 방법

var u = context.users.Where(BuildContainsExpression<user, Int32>(e => e.Userid, userids)).ToList(); 

이 문서가 문제를 해결하는 것이다.

+0

잘 작동합니다. 솔루션을 주셔서 감사합니다 – user1086355

+1

이것은 과잉입니다. 'Contains()'를 사용하기 위해 linq 질의를 작성하면 충분합니다. [내 대답보기] (http://stackoverflow.com/a/8421700/134445) 올바른 구문입니다. –

+0

엔티티 프레임 워크 1에서 .net 3.5. 잘 작동하지 않음 –

1

쉼표 대신 마침표를 넣으십시오.

이 당신이

var u = context.users.Where(o=> usersid.Contains(o => o.userid)).Select(o => o); 

은 당신이 올바른 경우가 당신이 . 대신 ,의 것을 사용하고 있는지 확인 사용하는 코드가 있다고 가정

var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o); 
+0

실수로 타이핑을해서 죄송합니다. ','을 '.'로 바꾸십시오. 그러나이 오류는 엔티티 프레임 작업 제한 일 수 있습니다. – user1086355

+0

사건은 어떻게됩니까? .contains 및 .select 대신 .contains 및 .select를 사용하고 Visual Basic과 달리 C#은 대/소문자를 구분합니다. –

+0

는 저에게 컴파일 오류를 제공합니다 – user1086355

0
var u = context.users,Where(o=> usersid.contains(o=> o.userid)),select(o=> o); 

시도하여 행동 양식.

0

가정 사용자 ID는 User.userid와 동일한 유형의 IEnumerable이,에 LINQ 쿼리를 변경하려고 할 수 있습니다 :

var u = context.users.Where(o=> userids.Contains(o.userid)); 
관련 문제