我是MVC的新手。我正在开发一个项目,我已经创建了一个模型类以及上下文类,如果我在普通视图中查看记录,它正在运行。 但是,如果我尝试通过" Series_Name"来获取组中的数据;并将其绑定到同一个模型类中,它会给出错误。这是我的代码
这是Model类和DBContextClass
[Table("tblvideo")]
public class TVSerial
{
[Key]
public Int64 Video_ID { get; set; }
public string Series_Name { get; set; }
public string Season_No { get; set; }
public string Episode_No { get; set; }
public string Episode_Name { get; set; }
public string Time_Duration { get; set; }
public string File_Url_480p { get; set; }
public string File_Url_720p { get; set; }
public string Description { get; set; }
public bool Is_Active { get; set; }
public string Image_Url_Small { get; set; }
public string Image_Url_Big { get; set; }
}
public class TvSerialContext : DbContext
{
public DbSet<TVSerial> TvSerials { get; set; }
}
这是控制器类:
public class TvSerialController : Controller
{
public ActionResult ListAllTvSerial()
{
try
{
TvSerialContext tvContext = new TvSerialContext();
List<TVSerial> tv = tvContext.TvSerials.ToList();
return View(tv);
}
catch (Exception ex)
{
return Content(ex.Message);
}
}
}
上面的代码按预期工作,但如果我这样做:
public ActionResult ListAllSeason(string serial)
{
try
{
TvSerialContext tvContext = new TvSerialContext();
List<TVSerial> tv = tvContext.TvSerials.Where(tvs => tvs.Series_Name == serial).Distinct().ToList();
return View(tv);
}
catch (Exception ex)
{
return Content(ex.Message);
}
}
它返回所有行,我只想要每个series_name和自定义字段中的单行&#34; Series_Name,Season_No,Image_Url_Big&#34; 我不知道如何实现这一目标。 获得结果:
答案 0 :(得分:2)
您可以通过创建视图模型并使用.GroupBy()
子句
public class TVSerialVM
{
public string SeriesName { get; set; }
public string SeasonNo { get; set; }
public string ImageUrl { get; set; }
}
以及投影到视图模型的查询
List<TVSerialVM> model = tvContext.TvSerials.Where(t => t.Series_Name == serial)
.GroupBy(t => new { t.Series_Name, t.Season_No, t.Image_Url_Big })
.Select(t => new TVSerialVM
{
SeriesName = t.Key.Series_Name,
SeasonNo = t.Key.Season_No,
ImageUrl = t.Key.Image_Url_Big
}).ToList();
旁注:数据库中的重复数据(季节编号和图像网址)。您应该考虑将图像网址移动到与季节编号有关系的另一个表格。
答案 1 :(得分:1)
即使您正在使用distinct,您获得多个值的原因是Distinct方法不知道TVSerial的“相等”是什么。
您可以使用与IEqualityComparer的Distinct。 https://msdn.microsoft.com/en-us/library/vstudio/bb338049(v=vs.100).aspx
答案 2 :(得分:0)
不保证对自定义对象不区分,它不知道要比较什么。我过去曾使用过这个SO来使我的自定义对象与Distinct一起工作。