假设我有这张表:
PetID Name Age Weight
如何在Linq2SQL中获取每个宠物的名称,年龄和体重,这是其年龄组中最重的?
因此,如果我有一只5岁的宠物和4只2岁的宠物,我想要5岁的宠物的名字,年龄和体重,以及2岁时最重要的4岁之一。那四个。
这应该不会太难,但我还没有深入思考。尽管如此。这是我需要多次的一种问题,但是并不能完全解决这个问题......
我认为它将包括使用Max或a>运营商,以及某种分组或加入,但这就是我已经得到的......
感谢您的回答。当谈到GroupBy时,所有这些都让我走上正轨。我标记为答案的那个是最接近我最终的那个。
答案 0 :(得分:1)
尝试此查询:
var petsGroup = ctx.Pets.GroupBy(p => p.Age)
.Select(g => g.First(x => x.Weight == g.Max(y => y.Weight)));
按年龄对宠物进行分组,然后选择该组中的第一个元素,该元素与该组的最大权重相匹配。
答案 1 :(得分:1)
这对你有什么用。
public class Pet
{
public int PetID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public decimal Weight { get; set; }
}
List<Pet> pets = new List<Pet>()
{
new Pet {PetID = 1, Age = 5, Name = "Bob", Weight = 4M },
new Pet {PetID = 2, Age = 5, Name = "Brad", Weight = 3M },
new Pet {PetID = 3, Age = 2, Name = "Troy", Weight = 1M },
new Pet {PetID = 4, Age = 2, Name = "Dave", Weight = 2M },
new Pet {PetID = 5, Age = 2, Name = "Simon", Weight = 3M }
};
var fatPetsByAge = from pet in pets
group pet by pet.Age into petsByAge
select new
{
Age = petsByAge.Key,
FatPet = petsByAge.FirstOrDefault(
f => f.Weight == petsByAge.Max(m => m.Weight))
};
foreach (var fatty in fatPetsByAge)
{
Console.WriteLine("PetID: {0}, Age: {1} Name: {2} Weight: {3}",
fatty.FatPet.PetID,
fatty.FatPet.Age,
fatty.FatPet.Name,
fatty.FatPet.Weight);
}
答案 2 :(得分:0)
可能是这样的:
var pets = from pet in petSource
group pet by pet.Age into g
let max = g.OrderByDescending(p => p.Weight).FirstOrDefault<Pet>()
select new { Name = max.Name, Age = max.Age, Weight = max.Weight };