1

タイプ List のプロパティ Users があります。List Exists メソッドを使用して、このリストに、パラメーターとして渡されたものと同じプロパティ名を持つオブジェクトが含まれているかどうかを確認しています。

public User SomeAction(User user)
{
   List<User> users = GetUsers();
   if(users.Exists(x => x.Name == user.Name))
   {
      // select user which exist under above criteria
   }
}

私の質問は、上記の基準でユーザーを選択するために使用するステートメントは何ですか?

4

6 に答える 6

2

Any ステートメントを使用します。ステートメントがいずれかのオブジェクトに一致する場合、これは true を返します。

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.any.aspx

if(users.Any(x=>x.Name == user.Name)){
  //....
}

EDIT:存在するかどうかを確認した後、ユーザーがユーザーを選択する必要がある部分を見逃しました。式の最初の一致を選択する場合。

var match = users.FirstOrDefault(x=>x.Name.Equals(user.Name));
if(match != null){
   //...TODO
}
于 2013-11-08T09:28:32.853 に答える
1
users.Single(x=>x.Name == user.Name)

String.Equals代わりにいくつかの他のものを使用してみてください

users.Single(x=>String.Equals(x.Name, user.Name))
于 2013-11-08T09:26:34.583 に答える
1

次のようになります。

users.Where((x=>x.Name == user.Name).SingleOrDefault();

一般に、コードを次のようにリファクタリングできます。

List<User> users = GetUsers();
var foundUser =  users.Where((x=>x.Name == user.Name).SingleOrDefault();
if(foundUser != null) {
  //DO SOMETHING AS THERE IS A USER
}

したがって、二重クエリは避けてください。

注: ここではそれUserが参照型であると想定しているため、デフォルト値はnullです。

于 2013-11-08T09:26:43.910 に答える
1

使用FirstOrDefault-null条件に一致するユーザーが存在しない場合は返され、そうでない場合は一致するユーザーが返されます。

users.FirstOrDefault(u => u.Name == user.Name)

またSingleOrDefault、基準に一致するユーザーが 1 人だけ存在する必要がある場合にも使用できます。

于 2013-11-08T09:27:14.110 に答える
1
User user = users.FirstOrDefault(x=>x.Name == user.Name)
if(user != null)...
于 2013-11-08T09:27:36.777 に答える
1

single を使用して 1 人のユーザーのみを取得し、同じ名前のユーザーが複数いる場合は例外を取得します

var user = users.Single(x=>x.Name==user.Name);
于 2013-11-08T09:27:50.360 に答える