2009-05-27 418 views
1

我在查詢實體模型時遇到問題以獲取其他信息。實體框架IQueryable

我的數據庫有一個程序表與一個事件表的一對多關係。實體模型生成的關係很好,但我無法弄清楚如何查詢模型來獲取progam對象的事件。

我可以這樣做:

var foo = from program in entities.ProgramSet 
      where program.StartDate > DateTime.now 
      orderby program.StartDate 
      select program; 

沒有問題存在。從我在Microsofts頁面上找到的內容(使用實體框架整形查詢):msdn.microsoft.com/en-us/library/bb896272.aspx,如果我想獲取子對象,我只需執行以下操作:

// Define a LINQ query with a path that returns 
// orders and items for a contact. 
var contacts = (from contact in context.Contact 
      .Include("SalesOrderHeader.SalesOrderDetail") 
      select contact).FirstOrDefault(); 

但是,在查詢中找不到包含或包含。

有什麼建議嗎?我知道我可以在結果中做一個foreach,然後在其上運行一個.Events.Load(),但不會強制執行sql的IQueriable結果,而不是optomize它只在.ToList( )等被稱爲它?

這裏是我的項目的一些示例代碼:

public class ProgramRepository : CT.Models.IProgramRepository 
{ 
    CTEntities db = new CTEntities(); 

    public IQueryable<Program> FindAllPrograms() 
    { 

     return db.ProgramSet; 
    } 
    public IQueryable<Program> FindUpcomingPrograms() 
    { 

     var programs = from program in FindAllPrograms() 

       where program.StartDate > DateTime.Now 
       orderby program.StartDate         
       select program; 
     return programs; 


    } 

隨着我想擁有它也包括事件數據的FindUpComingPrograms。程序和事件模型之間有關係。程序有一個列表<事件>屬性,我想用IQueryable方法填充並返回。

再次感謝!

+0

尚未與EF工作,但調用FirstOrDefault()將使查詢無論如何執行。 – CSharpAtl 2009-05-27 15:24:44

+0

是的,它會的,我想避免,FirstOrDefault()的樣本來自Microsofts網站。 – Mike 2009-05-27 19:53:45

回答

2

include函數是的ObjectQuery對象的一部分......

我想你會需要重新寫你的查詢看起來像這樣:

var contacts = context.Contact.Include("SalesOrderHeader.SalesOrderDetail").FirstOrDefault(); 

//Not sure on your dot path you might have to debug that a bit 

這裏是一個Article有一些例子...