List<VideoInfo> vobj = new List<VideoInfo>();
vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true)
orderby vid.VideoId descending
select vid
).ToList();
return View(vobj);
这是带有所有视频信息列表的orignal Query。 还有另一个名为profile的表,其中包含我需要的Profile Picture以及视频Info。 所以在浏览了一篇关于EF的文章后,我提出了类似这样的事情。
vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true)
select new
{
ProfileId = vid.ProfileId,
ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl
}
orderby vid.VideoId descending
select vid
).ToList();
return View(vobj);
ProfileId是外键。但这甚至没有编译。它在结束大括号和orderby之后显示红色语法错误。
答案 0 :(得分:2)
您应该在OrderBy
之前Select
select
,因为您想要订购的媒体资源不包含在新var vobj = (from vid in db.VideoInfoes.Where(c => c.IsActive == true)
orderby vid.VideoId descending
select new
{
ProfileId = vid.ProfileId,
ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl
}
).ToList();
中:
var vobj = db.VideoInfoes.Where(c => c.IsActive)
.OrderByDescending(c => c.VideoId)
.Select(c => new {
ProfileId = vid.ProfileId,
ProfilePictureUrl = vid.ProfileInfo.ProfilePictureUrl
}).ToList();
如果使用lambda语法,我感觉更舒服:
{{1}}
答案 1 :(得分:1)
您的功能可以更正,并且更简单,如下所示:
return View(
db
.VideoInfoes
.Where(videoInfo => videoInfo.IsActive)
.OrderByDescending(videoInfo => videoInfo.VideoID)
.ToList());
只要未处理ProfileInfo
连接,您就可以访问列表中每个VideoInfo
的{{1}}。或者,您可以稍后使用另一个上下文中的另一个查询中的db
属性访问其他ProfileInfo
个记录。这取决于你想对数据做什么; (例如,我不确定ProfileId
函数正在做什么。)
例如:
View