содержится в запросе linq - PullRequest
1 голос
/ 07 декабря 2011

Привет, я использую Entity Framework и LinQ.У меня есть таблица объектов под названием пользователи.у меня есть список под названием userids.Я должен найти всех пользователей, где идентификаторы содержатся в строке.Я должен сделать следующие операции ...

select * from users where userid in (userids);

Я пытался решить это следующим образом

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

, но это дает ошибку компиляции.как это решить?

Ответы [ 4 ]

1 голос
/ 07 декабря 2011

Поставьте точки вместо запятых.

Попробуйте

var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o);
0 голосов
/ 07 декабря 2011

Предполагая, что идентификаторы пользователя являются IEnumerable того же типа, что и User.userid, попробуйте изменить запрос LINQ на:

var u = context.users.Where(o=> userids.Contains(o.userid)); 
0 голосов
/ 07 декабря 2011

Попробуйте использовать это:

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 голосов
/ 07 декабря 2011
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);

убедитесь, что вы используете . вместо , и что у вас есть правильный регистр в ваших методах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...