包含在linq查询
嗨,我使用实体框架和LinQ。我有一个叫做用户的表格对象。我有一个名为userids的列表。我必须找到字符串中包含id的所有用户。我必须做如下操作...包含在linq查询
我试图解决这个问题这样
var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o);
,但它给编译错误。如何解决这个问题?
尝试使用此:
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();
这将解决您的问题。
以及这个作品。感谢您给予解决方案 – user1086355
这是矫枉过正。编写linq查询以正确使用“Contains()”应该就足够了。 [请参阅我的答案](http://stackoverflow.com/a/8421700/134445)以获取正确的语法。 –
在.net 3.5的实体框架1中.Contains不起作用 –
放置句点而不是逗号。
尝试
var u = context.users.Where(o=> usersid.Contains(o=> o.userid)).Select(o=> o);
抱歉打字错误。请将','替换为'。'。但是这给错误可能是它的一个实体框架的工作限制。 – user1086355
这个案子呢?你有.contains和.select而不是.Contains和.Select,而不像Visual Basic,C#是区分大小写的。 –
是给我编译错误 – user1086355
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);
确保您使用的,
和.
,而不是你有正确的情况下,代码你方法。
假设用户ID是相同类型的IEnumerable
为User.userid
,试着改变你的LINQ查询:
var u = context.users.Where(o=> userids.Contains(o.userid));
代码使用逗号,而不是时间,是在错误的情况。 C#区分大小写。 –