我正在研究这个MVC3 tutorial,并以逗号分隔的字符串输入电影类型。
在第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<string>();
var GenreQry = (from d in db.Movies
orderby d.Genre
select d.Genre ).Select(s=>s.Split(','))
.Distinct();
GenreLst.AddRange( GenreQry );
答案 0 :(得分:5)
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()
时,将获取您的数据并且您的查询实际上是列表,
在第二部分中,SelectMany
平面将字符串分隔为IEnumberable of strings。
修改:在第一部分中,您可以拨打.AsEnumerable()
而不是.ToList()
来获取数据,这似乎更好。
答案 1 :(得分:1)
如果您发现SelectMany语法有点令人困惑,请考虑以下内容(编译成一个选择很多方法调用,但我觉得更容易阅读):
var GenreQry = (from d in db.Movies.AsEnumerable()
from s in d.Split(',')
select s)
.Distinct()
.OrderBy(s => s);