代码之家  ›  专栏  ›  技术社区  ›  Michel

使用实体框架4执行自定义sql

  •  3
  • Michel  · 技术社区  · 14 年前

    我必须从数据库中接收工作订单,特别是针对用户的。

    所有用户的过滤器是不同的,因此一个人必须完成所有发往英国的订单,或所有发往其他5个国家的订单,一个人完成所有高价值的事情,一个人完成所有包含10个项目等的订单。

    所以,我想出了这个主意(如果你有更好的主意,就开枪吧!)

    我为每个用户创建一个视图,所有视图都返回相同的数据,但是过滤器是不同的。

    在ado.net中,我会这样做:

    string sql = "select * from vwWorkOrders" + userName;
    [rest of the ado.net here]
    

    但现在我正在使用ef4,我想知道什么是这种代码的等价物。

    2 回复  |  直到 14 年前
        1
  •  9
  •   Devart    14 年前

    你可以使用 ExecuteStoreQuery method 如下例所示:

    context.ExecuteStoreQuery<vwWorkOrder>(sql);
    

    此方法允许您执行存储SQL并获取强类型结果。
    如果需要传递一些参数,只需在ExecuteStoreQuery调用中传递必要的ObjectParameter实例。

        2
  •  3
  •   egoodberry    14 年前

    您可以使用ESQL,这使得查询更加灵活。你可以下载 LinqPad 事先玩弄它。

    // whereClause is a string
    string query = string.Format("select * from ObjectContext.vwWorkOrders where {0}", whereClause);
    

    那就用 EntityConnection EntityCommand 类来执行命令,并以与ADO.NET完全不同的方式循环结果。

    编辑:我刚看到你的评论,我以为你的例子有点错。一个更适合您所要实现的目标的代码片段:

    // userName is a string, ie "Michel"
    string query = string.Format("select * from ObjectContext.vwWorkOrders{0}", userName);