は、私は、次のフィールドとPersonオブジェクトのデータベースを持っていると言いますその他のC#コード)Person
が(米国)でのみ生まれたbirthDate
を検索し、最大birthDate
のPerson
を返します。この日付に複数の子が生まれた場合は、すべての子を返す必要があります。yのフィールドに対してのみ満たすオブジェクトからのXフィールドの最大値を取得する「真」
どうすればいいですか?あなたがしたいよう
は、私は、次のフィールドとPersonオブジェクトのデータベースを持っていると言いますその他のC#コード)Person
が(米国)でのみ生まれたbirthDate
を検索し、最大birthDate
のPerson
を返します。この日付に複数の子が生まれた場合は、すべての子を返す必要があります。yのフィールドに対してのみ満たすオブジェクトからのXフィールドの最大値を取得する「真」
どうすればいいですか?あなたがしたいよう
まあ、それが聞こえる:国別
だから(規約に従うためにプロパティ名が固定されていると仮定して):
var query = db.People
.Where(p => p.CountryOfBirth == "USA")
.GroupBy(p => p.BirthDate)
.OrderByDescending(p => p.Key)
.FirstOrDefault();
米国で生まれた人がいないため、グループがない場合はnull
が返されます。あれば代わりに空のシーケンスを返すには、最初の結果をフラット化できます。
var query = db.People
.Where(p => p.CountryOfBirth == "USA")
.GroupBy(p => p.BirthDate)
.OrderByDescending(p => p.Key)
.Take(1)
.SelectMany(p => p);
これはクエリを返すように設定されているので、 'TakeOf(1).SelectMany(g => g)'は 'FirstOrDefault'よりも適切でしょうか? –
@IvanStoev:代わりに空のセットを返すことを意味しますか?確かに、それはうまくいくでしょう。そのオプションで更新されます。 –
が、私はそれが助け場合は2つのクエリでそれを行う方法を知っています。 https://dotnetfiddle.net/c3BNWp
コード: はこの上の表情持っ余談として
public class Program
{
public static void Main()
{
var list = new List<Person>(){
new Person(){
Name = "1",
countryOfBirth = "USA",
birthDate = new DateTime(2000,1,1)
},
new Person(){
Name = "2",
countryOfBirth = "USA",
birthDate = new DateTime(1999,1,1)
},
new Person(){
Name = "3",
countryOfBirth = "USA",
birthDate = new DateTime(2000,1,1)
},
new Person(){
Name = "4",
countryOfBirth = "Other",
birthDate = new DateTime(2000,1,1)
},
new Person(){
Name = "5",
countryOfBirth = "SomeOther",
birthDate = new DateTime(2000,1,1)
}
};
var max = list.Where(p=> p.countryOfBirth == "USA").Max(a=> a.birthDate);
Console.WriteLine(max);
var maxList = list.Where(p=> p.countryOfBirth == "USA" && p.birthDate == max).ToList();
foreach(var p in maxList){
Console.WriteLine(p.Name);
}
}
}
class Person
{
public string Name {get; set;}
public DateTime birthDate { get; set; }
public string countryOfBirth { get; set; }
}
を、私は*強く*あなたがプロパティの.NET命名規則を次開始することをお勧めします。 –
ありがとうございました。 – HeyJude