更新
我现在让它工作到一定程度上填充了视图,但我的查询错误,因此没有检索到数据。
我的ViewModel
public class ViewProductions
{
public string Venuename { get; set; }
public string Showname { get; set; }
public DateTime ProductionYear { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
查询
var query =
from f in _db.Production
join g in _db.Run on f.show equals g.venue
select new ViewProductions {
Venuename = g.venue,
Showname = f.show,
StartDate = g.startDate,
EndDate = g.endDate
};
return View(query);
我有SQL格式的查询
SELECT Production.show, Run.venue, Run.startDate, Run.endDate, Production.director, Production.designer
FROM Production INNER JOIN
Run ON Production.show = Run.show
有人可以帮我转换为linq吗?
再次感谢
答案 0 :(得分:1)
这是一个好的开始。记住这个想法是ViewModel将包含视图所需的所有数据。尽可能大或小。
如果您要显示Show列表,则可能需要将其更改为:
public List<Show> {get; private set;}
如果在给定对象中,您只使用一个属性。不要担心创建ViewData属性而不是使用整个对象。举个例子:
public class Venue
{
public string Name;
public string State;
public string City;
public int Capacity;
...
}
让我们说这个给定的ViewModel你只需要Venue的名字。无需添加整个Venue,只需添加VenuName属性即可。
blog有一个很好的解释。
修改强>
Here是使用System.Data.Linq.SqlClient.SqlMethods专门用于DATEDIFF的一些不错的示例。你可以这样做:
where SqlMethods.DateDiffMonth(Book.EntryDate, DateTime.Now) <= 3 order by dates.startDate
编辑2
尝试这样的事情:
一些指针,注意 ViewModelProduction(),你必须把()表示你正在创建新对象。 ToList()是转换LINQ返回的IEnumerable。同样在这种情况下,我在startDate上使用 orderby 。查看一些LINQ examples。这个非常有用的工具:LinqPad。
var query = (from p in db.Production
join r in _db.Run on p.show equals r.show
orderby r.startDate
select new ViewModelProduction()
{
show = p.show,
venue = r.venue,
startDate = r.startDate,
endDate = r.endDate,
director = p.director,
designer = p.director
}).ToList();