我正在创建一个视频系统,我告诉同一部电影有多个条目,就像真正的视频电影一样,但它们都应该有唯一的ID。我使用LINQ来获取数据,目前我的视图显示了整个表格,因此相同的电影名称会重复出现。我尝试使用.Distinct扩展方法,但由于ID不相同,因此它们都是不同的。我需要忽略对象的ID部分,但无法弄清楚。
public static List<Movie> GetAllMovies()
{
return Context.Movie.ToList();
}
public static List<Movie> GetAllMoviesDistinct()
{
return Context.Movie.Distinct().ToList();
}
这两种方法完全相同
答案 0 :(得分:1)
你需要这样的东西:
public static List<string> GetAllMovieTitlesDistinct()
{
return Context.Movie.GroupBy(x => x.Title).Select(x => x.Key).ToList();
}
由于同一部电影有多个条目,因此返回具有特定名称的随机(或仅第一部)电影并不合理。我宁愿做的是获得独特的电影片头,选择一个标题,然后列出所有条目。
上述方法的作用是,它按照名称对所有电影进行分组,然后只选择每个独特的电影标题。请注意,它不会返回每个标题的特定条目,因为这将是非常随意的,可能会导致不必要的结果。
答案 1 :(得分:1)
您可以使用MoreLINQ执行此操作:
var result = Context.Movie
.DistinctBy(m => new {
// take all properties except your ID
})
.ToList();
答案 2 :(得分:1)
您可以使用GroupBy获取具有唯一名称的电影。
return Context.Movie.GroupBy(m => m.Name).Select(x => x.First()).ToList();
答案 3 :(得分:0)
var groupesList = Context.Movie.GroupBy(x => x.Name,
(key, val) => new {Key = key, Value = val}).ToList();
然后您可以通过键调用Key(唯一)或Value for all inform,例如所有ID