实体框架IQueryable

时间:2009-05-27 15:12:16

标签: entity-framework

我在查询实体模型时遇到问题,无法获取更多信息。

我的数据库有一个Program表,它与Events表有一对多的关系。实体模型生成关系很好,但我无法弄清楚如何查询模型以获取带有事件的progam对象。

我可以这样做:

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

没有问题。从我在微软页面上找到的内容(使用实体框架修改查询):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();

但是,我可以在查询中找到.Include或Include。

有什么建议吗?我知道我可以在结果上做一个foreach,然后对它运行一个.Events.Load(),但是不会强制IQueriable结果执行sql,而不是仅在.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我希望它还包括事件数据。程序和事件模型之间存在关系。程序有一个List <事件>属性,我想填充并使用IQueryable方法返回。

再次感谢!

1 个答案:

答案 0 :(得分: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,其中包含一些示例......