gpt4 book ai didi

c# - 通过使用 linq 按字母顺序分组来计算电影

转载 作者:行者123 更新时间:2023-11-30 17:54:12 26 4
gpt4 key购买 nike

我要做的是将所有以字母和数字开头的电影数为 number=20, A=10, B=12,......z=18 等。到目前为止我已经尝试了两个查询以达到我想要的结果:

首先:

var companyquery = (from movieInfo in db.MovieInformations
group movieInfo by movieInfo.MovieTitle.Substring(0, 1)
into movieInfogroup
select new MovieNumberModel
{
Character = movieInfogroup.Key,
Number = movieInfogroup.Count()
}).OrderBy(mapping => mapping.Character);

但它只按第一个字母分组。因此,我创建了另一个存储字母表的表并编写了以下 linq 查询:

var companyquery1 = (from movieInfo in db.MovieInformations
from Category in db.CharCategory
group movieInfo.MovieTitle by Category.Character
into movieInfogroup
select new MovieNumberModel
{
Character = movieInfogroup.Key,
Number = movieInfogroup.Count()
}).OrderBy(mapping => mapping.Character)

此 linq 查询确实给出了所有字母表,如 A 到 z,但计数不正确。请帮我找到解决方案,让所有以数字开头的电影都归为一类,而以字母开头的电影则根据字母表分组。谢谢!

最佳答案

当您对结果进行分组时,您可以测试第一个字符是否为数字。如果是,则按“数字”等特殊名称分组,否则按第一个字符分组:

var companyquery1 = db.MovieInformations
.Select(movieInfo => movieInfo.MovieTitle.FirstOrDefault().ToString())
.GroupBy(firstChar => SqlMethods.Like(firstChar, "[0-9]%") ? "Number" : firstChar)
.Select(grp => new { Character = grp.Key, Number = grp.Count() })
.OrderBy(anon => anon.Character);

您必须使用 SqlMethods.Like 函数,因为您正在查询数据库。

你也可以加载内存中的所有信息,以便能够使用经典方法:

var movieInformations = db.MovieInformations.ToList();
var companyquery1 = movieInformations
.Select(movieInfo => movieInfo.MovieTitle.FirstOrDefault().ToString())
.GroupBy(firstChar => Char.IsDigit(firstChar) ? "Number" : firstChar)
.Select(grp => new { Character = grp.Key, Number = grp.Count() })
.OrderBy(anon => anon.Character);

选择取决于您和您的数据库容量/性能要求。

引用:

关于c# - 通过使用 linq 按字母顺序分组来计算电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297099/

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