Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ将表中逗号分隔的字符串转换为不同的值集合_C#_Linq - Fatal编程技术网

C# 使用LINQ将表中逗号分隔的字符串转换为不同的值集合

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

我正在研究这一点,并以逗号分隔字符串的形式进入了电影类型

在第6部分中,我们从表中获取类型以填充下拉列表

我想在下拉列表中填入一组独特的单一流派,但我就是无法让它发挥作用

这是本教程建议的起点

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