2011-04-01 80 views
0

更新使用查看数据加入查询

我现在有它的工作程度的视图填充,但我的查询是错误的,因此没有数据检索。

我的视图模型

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?

再次感谢

回答

1

这是一个好的开始。记住这个想法是ViewModel将包含视图所需的所有数据。使其尽可能大或小。

如果你将显示显示列表,你可能需要将其更改为类似:

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属性即可。

A blog有一个很好的解释。

EDIT

Here是使用System.Data.Linq.SqlClient.SqlMethods具体地说,DATEDIFF一些很好的例子。你可以做这样的事情:

where SqlMethods.DateDiffMonth(Book.EntryDate, DateTime.Now) <= 3 order by dates.startDate 

EDIT 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(); 
+0

感谢您的信息@mcbros。我更新了问题,询问我需要创建的查询,因为我遇到了一些问题 – 2011-04-02 14:38:41

+0

@Chris_,我编辑了一些更多信息,或者我希望如此。 – mateuscb 2011-04-02 15:35:22

+0

感谢您的帮助,我快到了!我已经更新了答案,基本上这是我需要排序的查询,然后应该正常工作。 – 2011-04-03 20:29:48