2011-12-07 9 views
1

こんにちは私はエンティティフレームワークとLinQを使用しています。私はユーザーと呼ばれるテーブルオブジェクトを持っています。私はユーザーIDというリストを持っています。私は文字列にidsが含まれているすべてのユーザーを見つける必要があります。私は ​​ はlinqクエリに含まれています

が、私はこの

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(); 

これはあなたの問題を解決しますが。ユーザIDを想定し

+0

これはうまく動作します。解決をお寄せいただきありがとうございます – user1086355

+1

これは過剰です。 'Contains()'を使うlinqクエリを書くだけで十分です。正しい構文については、[私の答えを見る](http://stackoverflow.com/a/8421700/134445)を参照してください。 –

+0

.net 3.5のエンティティフレームワーク1でうまく動作しません。 –

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

User.useridと同じタイプのIEnumerableで、あなたにLINQクエリを変更してみてください:

var u = context.users.Where(o=> userids.Contains(o.userid)); 
関連する問題