C# 使用LINQ将表中逗号分隔的字符串转换为不同的值集合
我正在研究这一点,并以逗号分隔字符串的形式进入了电影类型 在第6部分中,我们从表中获取类型以填充下拉列表 我想在下拉列表中填入一组独特的单一流派,但我就是无法让它发挥作用 这是本教程建议的起点C# 使用LINQ将表中逗号分隔的字符串转换为不同的值集合,c#,linq,C#,Linq,我正在研究这一点,并以逗号分隔字符串的形式进入了电影类型 在第6部分中,我们从表中获取类型以填充下拉列表 我想在下拉列表中填入一组独特的单一流派,但我就是无法让它发挥作用 这是本教程建议的起点 var GenreLst = new List<string>(); var GenreQry = from d in db.Movies orderby d.Genre select d.Genre; GenreL
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
var GenreLst=new List();
var GenreQry=以db.Movies表示的d
按d.体裁排序
选择d.类型;
GenreLst.AddRange(GenreQry.Distinct());
。。。这就是我要去的地方
var GenreLst = new List<string>();
var GenreQry = (from d in db.Movies
orderby d.Genre
select d.Genre ).Select(s=>s.Split(','))
.Distinct();
GenreLst.AddRange( GenreQry );
var GenreLst=new List();
var GenreQry=(从db.Movies中的d开始)
按d.体裁排序
选择d.类型)。选择(s=>s.Split(','))
.Distinct();
GenreLst.AddRange(GenreQry);
Linq2Sql不知道s.Split(',')
方法,因此它应该引发异常,您可以执行以下操作:
var GenreQry = (from d in db.Movies
orderby d.Genre
select d.Genre ).Distinct().ToList();
GenreLst.AddRange( GenreQry.SelectMany(x=>x.Split(',')).Distinct());
关于上述代码:
当在查询结束时调用ToList()
时,将获取您的数据,并且您的查询实际上是列表,
在第二部分中,选择许多
平铺分隔的字符串作为字符串的IEnumberable
编辑:在第一部分中,您还可以调用
.AsEnumerable()
而不是.ToList()
来获取数据,这似乎是更好的方法。Linq2Sql不知道s.Split(',')
方法,因此它应该引发异常,您可以这样做:
var GenreQry = (from d in db.Movies
orderby d.Genre
select d.Genre ).Distinct().ToList();
GenreLst.AddRange( GenreQry.SelectMany(x=>x.Split(',')).Distinct());
关于上述代码:
当在查询结束时调用ToList()
时,将获取您的数据,并且您的查询实际上是列表,
在第二部分中,选择许多
平铺分隔的字符串作为字符串的IEnumberable
<强> >编辑:在第一部分中,您可以调用<代码> .aseMeReable()/<代码>而不是<代码> .Telistor(< /代码>)来获取数据,这似乎更好。
< P>如果您发现SelectMany语法有点混乱,请考虑下面的内容(它编译成一个SELECT下的许多方法调用,但我更容易阅读):当你发现SelectMany语法有点混乱时,考虑下面的内容(在封面中编译成一个选择很多方法调用,但我发现更容易阅读):
谢谢我不得不调整括号以获得我想要的输出,结果是“GenreLst.AddRange(GenreQry.SelectMany(x=>x.Split(',')).Distinct();”@TeamWild,我理解并编辑它,我在IE中写的,我没有看到括号不匹配:)我认为在初始查询中对排序或
Distinct
没有意义,因为在执行Split
@Gabe之后,您必须重新进行排序,为什么要从DB获取额外信息?当您最后想要删除它们时,因为性能问题最好是防止这样的情况发生:如果数据量很大,传输它们比调用distinct更耗时,而且sql的运行速度也足够快。@Saeed:很公平,但为什么要在数据返回之前对其进行排序?为什么要将其复制到列表中
?谢谢。我不得不调整括号以获得我想要的输出,结果是“GenreLst.AddRange(GenreQry.SelectMany(x=>x.Split(',')).Distinct();”@TeamWild,我理解并编辑它,我在IE中写的,我没有看到括号不匹配:)我认为在初始查询中对排序或Distinct
没有意义,因为在执行Split
@Gabe之后,您必须重新进行排序,为什么要从DB获取额外信息?当您最后想要删除它们时,因为性能问题最好是防止这样的情况发生:如果数据量很大,传输它们比调用distinct更耗时,而且sql的运行速度也足够快。@Saeed:很公平,但为什么要在数据返回之前对其进行排序?为什么要将它复制到列表中?“我无法让它工作”不是一个问题。如果代码未编译,请给出错误消息。如果它没有达到你的期望,展示它的功能和你的期望。我很抱歉。我也无法让它编译,但提供了代码来显示我正在尝试做什么。我现在已经实现了@SaeedAmiri建议的解决方案,但有点扭曲。谢谢。“我不能让它工作”不是一个问题。如果代码未编译,请给出错误消息。如果它没有达到你的期望,展示它的功能和你的期望。我很抱歉。我也无法让它编译,但提供了代码来显示我正在尝试做什么。我现在已经实现了@SaeedAmiri建议的解决方案,但有点扭曲。谢谢。正如Saeed在他的帖子的评论中提到的,在可数
之前放置一个Distinct
,以限制从数据库返回的数据量,然后在排序之前再次使用Distinct
。正如Saeed在他的帖子的评论中提到的,在可计算的
之前放置一个Distinct
,以限制从数据库返回的数据量,然后在排序之前再次使用Distinct
。