gpt4 book ai didi

c# - 对 Linq 和分组感到困惑

转载 作者:行者123 更新时间:2023-11-30 22:04:51 26 4
gpt4 key购买 nike

我正在使用 Entity Framework 和 Linq,并尝试学习一些新东西。现在我有一个问题,我可以用 SQL 轻松解决,但想用 Linq 来解决。

我有一个颜色类和一个汽车类。每个 Car 对象都有一种颜色。

public class Color
{
public int ColorID { get; set; }
public string Name { get; set; }
}

public class Car
{
public Guid CarID { get; set; }
public string ModelName { get; set; }

public int ColorID { get; set; }

public virtual Color CarColor { get; set; }
}

现在我想创建一个查询来获取所有颜色(ID 和名称)以及使用该颜色的汽车数量(如果有的话)。

这次尝试给了我几乎正确的结果,但它排除了未使用的颜色。

        var n3 = from car in db.Cars
join c in db.Colors on car.ColorID equals c.ColorID into j1
from j2 in j1.DefaultIfEmpty()
group j2 by j2.ColorID into colorgroup
select new ColorCarCount
{
CarCount = colorgroup.Count(t => t.ColorID != null),
ColorID = colorgroup.Key, //colorgroup.Key,
Name = colorgroup.FirstOrDefault().Name
};

这种尝试感觉最好,但是这里我获取不到颜色名称:

        var n4 = from c in db.Colors
join car in db.Cars on c.ColorID equals car.ColorID into j1
from j2 in j1.DefaultIfEmpty()
group j2 by j2.ColorID into colorgroup
select new ColorCarCount
{
CarCount = colorgroup.Count(t => t.ColorID != null),
ColorID = colorgroup.Key,
Name = "Can't get color name here"
};

有什么建议吗?是的,我读过类似的问题,但我不太明白 - 但我相信这很容易:-)

最佳答案

    var n4 = from c in db.Colors
join car in db.Cars on c.ColorID equals car.ColorID into tmp
from car in tmp.DefaultIfEmpty()
group car by c into colorgroup
select new ColorCarCount
{
CarCount = colorgroup.Count(),
ColorID = colorgroup.Key.ColorID,
Name = colorgroup.Key.Name
};

关于c# - 对 Linq 和分组感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com