1

私がやろうとしていることに関連する2つのクラスがあります。

クラス 1: 人

クラス 2: 個人プロファイル

個人には、住所、名前、電話番号などのプロパティがあります...

Personal Profiles クラスの内部には、作成された Person の情報を格納する List があります。

私の質問:アドレスを持つ人がリスト内に存在するかどうかを調べようとしている場合: 999 Candy Lane がリスト内に存在する場合、指定されたアドレスを除くすべてのデフォルトで新しい人を作成し、.Exists または でそれを使用する必要がありますか?含まれていますか?または、検索機能のためだけに新しいオブジェクトを作成しないでください。

4

6 に答える 6

2

Linq を使用しない理由:

theList.Where(x => x.address == "999 Candy Lane").First();
于 2013-02-14T16:02:43.923 に答える
1

.net 3.5+ を使用している場合は、linq クエリを使用できます。

var result = (from p in Profiles where p.Address=="bla bla" select p).FirstOrDefault();

一致する人物が見つからない場合、結果は null になります。

于 2013-02-14T16:04:01.777 に答える
1

欠損値の可能性が高いことを考えると、FirstOrDefault を使用することをお勧めします。もちろん First と FirstOrDefault は述語を取るので Where を使う必要はありません

var result = List.FirstOrDefault(x => x.Address == "999 Candy Lane"); 
if(result != null)
{
  ......
}
于 2013-02-14T16:08:50.187 に答える
0

おそらくlinqとラムダを使用したいでしょう:

var candyLane = Persons.Where(x => x.Address == "999 Candy Lane").ToList();

これが行うことは、セレクターとして使用されるラムダ述語を提供することです。次のように指定された無名関数のように考えてください。

public bool CandyLaneChecker(x){
    return x.Address == "999 Candy Lane";
}

中括弧と return キーワードは a に置き換えられ、無名関数であるため=>thepublic bool CandyLaneCheckerは省略されます。元の述語に括弧を残す(x) => x.Address == "999 Candy Lane"こともできましたが、それらは必要ありません。

あるいは、次のような linq 式を使用することもできます。

var candyLane = (from p in persons
                 where p.Profile.Address == "999 Candy Lane"
                 select p).ToList();

これは、データベース クエリによく似ており、一部の人にとっては理解しやすいものです。

linq 式の優れた点は、同じ式を XML でも使用できることです。

于 2013-02-14T16:06:39.187 に答える
0

これは の正確な使用例ですAny

次のように使用されます。

if(People.Any(p => p.Address.Equals("999 Candy Lane")))
{
    //.....
}
于 2013-02-14T16:03:54.637 に答える
0

いいえ、検索用に新しいオブジェクトを作成する必要はありません:

Person person = profiles.PersonsList.Where(p => p.Address == "Address here")
                                    .Select(p => p);
于 2013-02-14T16:04:18.347 に答える