包含在linq查询

问题描述:

嗨,我使用实体框架和LinQ。我有一个叫做用户的表格对象。我有一个名为userids的列表。我必须找到字符串中包含id的所有用户。我必须做如下操作...包含在linq查询

​​

我试图解决这个问题这样

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

,但它给编译错误。如何解决这个问题?

+3

代码使用逗号,而不是时间,是在错误的情况。 C#区分大小写。 –

尝试使用此:

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

这是矫枉过正。编写linq查询以正确使用“Contains()”应该就足够了。 [请参阅我的答案](http://stackoverflow.com/a/8421700/134445)以获取正确的语法。 –

+0

在.net 3.5的实体框架1中.Contains不起作用 –

放置句点而不是逗号。

尝试

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

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是相同类型的IEnumerableUser.userid,试着改变你的LINQ查询:

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