db表中具有唯一ID但名称相同的不同行

时间:2015-04-16 08:08:10

标签: c# .net linq

我正在创建一个视频系统,我告诉同一部电影有多个条目,就像真正的视频电影一样,但它们都应该有唯一的ID。我使用LINQ来获取数据,目前我的视图显示了整个表格,因此相同的电影名称会重复出现。我尝试使用.Distinct扩展方法,但由于ID不相同,因此它们都是不同的。我需要忽略对象的ID部分,但无法弄清楚。

    public static List<Movie> GetAllMovies()
    {
        return Context.Movie.ToList();
    }
    public static List<Movie> GetAllMoviesDistinct()
    {
        return Context.Movie.Distinct().ToList();
    } 

这两种方法完全相同

4 个答案:

答案 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