包含在linq查询中
嗨我正在使用entity framework和LinQ。 我有一个名为users的表对象。 我有一个名为userids的列表。 我必须找到字符串中包含ids的所有用户。 我必须做以下操作……
select * from users where userid in (userids);
我试着像这样解决这个问题
var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o);
但它给出了编译错误。 怎么解决这个?
试着用这个:
protected Expression> BuildContainsExpression(Expression> valueSelector, IEnumerable 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((accumulate, equal) => Expression.Or(accumulate, equal)); return Expression.Lambda>(body, p); }
像这样调用方法:
var u = context.users.Where(BuildContainsExpression(e => e.Userid, userids)).ToList();
这将解决您的问题。
放句号而不是逗号。
尝试
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);
假设这是您正在使用的代码
var u = context.users.Where(o=> usersid.Contains(o => o.userid)).Select(o => o);
确保你正在使用.
而不是,
并且你的方法上有正确的案例。
假设User.userid
是与User.userid
相同类型的IEnumerable
,请尝试将LINQ查询更改为:
var u = context.users.Where(o=> userids.Contains(o.userid));