Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于只包含where子句的查询,将忽略EF,Include()上的Linq查询_C#_Entity Framework_Linq To Entities - Fatal编程技术网

C# 对于只包含where子句的查询,将忽略EF,Include()上的Linq查询

C# 对于只包含where子句的查询,将忽略EF,Include()上的Linq查询,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我的BLL中有以下代码,可通过WCF服务调用访问: public List<Dispatch> GetDispatchesByDateRange(DateTime start, DateTime end, params string[] includes) { MyEntities entities = new MyEntities(); var res = from d in entities.Dispatches where d.Rou

我的BLL中有以下代码,可通过WCF服务调用访问:

public List<Dispatch> GetDispatchesByDateRange(DateTime start, DateTime end, params string[] includes)
{
    MyEntities entities = new MyEntities();
    var res = from d in entities.Dispatches
              where d.Route.Legs.Any(x =>
                  x.StartPoint.ArrivalTime >= start && x.StartPoint.ArrivalTime <= end ||
                  x.StartPoint.DepartureTime >= start && x.StartPoint.DepartureTime <= end ||
                  x.EndPoint.ArrivalTime >= start && x.EndPoint.ArrivalTime <= end ||
                  x.EndPoint.DepartureTime >= start && x.EndPoint.DepartureTime <= end)
              select d;

    ObjectQuery<Dispatch> query = res as ObjectQuery<Dispatch>;

    foreach (string s in includes)
        query.Include(s);

    return query.ToList();
}
public List GetDispatchesByDateRange(日期时间开始、日期时间结束、参数字符串[]包括)
{
MyEntities实体=新的MyEntities();
var res=来自实体中的d。分派
其中d.Route.Legs.Any(x=>

x、 StartPoint.ArrivalTime>=start&&x.StartPoint.ArrivalTime=start&&x.StartPoint.DepartureTime=start&&x.EndPoint.ArrivalTime=start&&x.EndPoint.DepartureTime您可以尝试在Where()之前调用Include扩展方法

在EF 5中,它可以按以下方式进行

DbQuery<Dispatch> query = entities.Dispatches;

foreach (var include in includes)
{
    query = query.Include(include);
}

var res = from d in dispatches 
          where ...
          select d;
DbQuery=entities.Dispatches;
foreach(包含在包含中的var)
{
query=query.Include(包含);
}
var res=来自调度中的d
哪里
选择d;

您可以尝试在Where()之前调用Include扩展方法

在EF 5中,它可以按以下方式进行

DbQuery<Dispatch> query = entities.Dispatches;

foreach (var include in includes)
{
    query = query.Include(include);
}

var res = from d in dispatches 
          where ...
          select d;
DbQuery=entities.Dispatches;
foreach(包含在包含中的var)
{
query=query.Include(包含);
}
var res=来自调度中的d
哪里
选择d;

最终实现了这一目标,必须使用以下公式:

ObjectQuery<Dispatch> query = (from item in entities.Dispatches select item) as ObjectQuery<Dispatch>;

            foreach (string s in includes)
                query = query.Include(s);

            var res = from d in query
                      where d.Route.Legs.Any(x =>
                      x.StartPoint.ArrivalTime >= start && x.StartPoint.ArrivalTime <= end ||
                      x.StartPoint.DepartureTime >= start && x.StartPoint.DepartureTime <= end ||
                      x.EndPoint.ArrivalTime >= start && x.EndPoint.ArrivalTime <= end ||
                      x.EndPoint.DepartureTime >= start && x.EndPoint.DepartureTime <= end)
                      select d;
ObjectQuery query=(来自实体中的项。分派选择项)作为ObjectQuery;
foreach(includes中的字符串s)
查询=查询。包括;
var res=来自查询中的d
其中d.Route.Legs.Any(x=>

x、 StartPoint.ArrivalTime>=start&&x.StartPoint.ArrivalTime=start&&x.StartPoint.DepartureTime=start&&x.EndPoint.ArrivalTime=start&&x.EndPoint.DepartureTime最终完成了这项工作,必须使用以下公式:

ObjectQuery<Dispatch> query = (from item in entities.Dispatches select item) as ObjectQuery<Dispatch>;

            foreach (string s in includes)
                query = query.Include(s);

            var res = from d in query
                      where d.Route.Legs.Any(x =>
                      x.StartPoint.ArrivalTime >= start && x.StartPoint.ArrivalTime <= end ||
                      x.StartPoint.DepartureTime >= start && x.StartPoint.DepartureTime <= end ||
                      x.EndPoint.ArrivalTime >= start && x.EndPoint.ArrivalTime <= end ||
                      x.EndPoint.DepartureTime >= start && x.EndPoint.DepartureTime <= end)
                      select d;
ObjectQuery query=(来自实体中的项。分派选择项)作为ObjectQuery;
foreach(includes中的字符串s)
查询=查询。包括;
var res=来自查询中的d
其中d.Route.Legs.Any(x=>

x、 StartPoint.ArrivalTime>=start&&x.StartPoint.ArrivalTime=start&&x.StartPoint.DepartureTime=start&&x.EndPoint.ArrivalTime=start&&x.EndPoint.DepartureTime我也有同样的问题,EF忽略
Include()
没有任何原因。我通过使用子查询解决了这个问题。这不是最好的解决方案,但找不到另一个可行的解决方案…下面是一段代码。编辑:您可能也可以用连接替换它,但没有时间测试它

注意:我在撰写本文时使用的是EF Core RC1(不是我的决定)


我也有同样的问题,EF无缘无故地忽略了
Include()
。我通过使用子查询解决了这个问题。这不是最好的解决方案,但找不到另一个可行的解决方案…下面的代码片段。编辑:您可能也可以用连接替换它,但没有时间测试它

注意:我在撰写本文时使用的是EF Core RC1(不是我的决定)


感谢您的响应!entities。Dispatches是一个objectset,所以我不得不使用ObjectQuery来实现相同的目标,但不幸的是它仍然没有执行Include。我可以在SQL Profiler中看到查询,它只是从Dispatches中进行选择,并有一个巨大的where exists子句。该死!感谢您的响应!entities。Dispatches是一个objectse所以我不得不使用ObjectQuery来实现同样的目标,但不幸的是它仍然没有执行include。我可以在SQL Profiler中看到查询,它只是从Dispatches中进行选择,并有一个巨大的where exists子句。该死!这很容易知道-但是我还是这看起来像EF中的一个bug???将注释移动到单独的答案。这很容易理解知道-但是我还是这看起来像EF中的一个bug???将评论移至单独的答案。