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

C# db表中具有唯一ID但名称相同的不同行,c#,.net,linq,C#,.net,Linq,我正在创建一个视频租赁系统,我被告知同一部电影有多个条目,就像在真实的视频商店中一样,但它们都应该有唯一的ID。我正在使用LINQ获取数据,目前我的视图显示了整个表,因此同一个电影名称会重复很多次。我尝试使用.Distinct扩展方法,但由于ID不同,它们都是不同的。我需要忽略对象的ID部分,但无法找到它 public static List<Movie> GetAllMovies() { return Context.Movie.ToList();

我正在创建一个视频租赁系统,我被告知同一部电影有多个条目,就像在真实的视频商店中一样,但它们都应该有唯一的ID。我正在使用LINQ获取数据,目前我的视图显示了整个表,因此同一个电影名称会重复很多次。我尝试使用.Distinct扩展方法,但由于ID不同,它们都是不同的。我需要忽略对象的ID部分,但无法找到它

    public static List<Movie> GetAllMovies()
    {
        return Context.Movie.ToList();
    }
    public static List<Movie> GetAllMoviesDistinct()
    {
        return Context.Movie.Distinct().ToList();
    } 
公共静态列表GetAllMovies()
{
返回Context.Movie.ToList();
}
公共静态列表GetAllMoviesDistinct()
{
返回Context.Movie.Distinct().ToList();
} 

这两种方法的作用完全相同

您需要这样的方法:

public static List<string> GetAllMovieTitlesDistinct()
{
     return Context.Movie.GroupBy(x => x.Title).Select(x => x.Key).ToList();
}
public静态列表GetAllMovieTitlesDistinct()
{
返回Context.Movie.GroupBy(x=>x.Title);
}
由于同一部电影有多个条目,因此使用特定名称随机返回(或仅返回第一部)电影是没有意义的。我更愿意做的是,获取唯一的电影标题,选择一个标题,然后列出该标题的所有条目

上面的方法所做的是,它将所有电影按名称分组,然后只选择每个唯一的电影标题。请注意,它不会为每个标题返回特定的条目,因为这将是非常随意的,可能会导致不必要的结果。

您可以通过以下方式执行此操作:


您可以使用GroupBy获取具有唯一名称的电影

return Context.Movie.GroupBy(m => m.Name).Select(x => x.First()).ToList();

然后,您可以调用Key(unque)或Value by Key for all inform,例如all ID

这对我来说很有效,但与MoreLINQ解决方案相比,它太混乱了,特别是因为我需要更多的查询
return Context.Movie.GroupBy(m => m.Name).Select(x => x.First()).ToList();
var groupesList = Context.Movie.GroupBy(x => x.Name,
     (key, val) => new {Key = key, Value = val}).ToList();