Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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# LINQ-包含子属性的子属性_C#_.net_Linq - Fatal编程技术网

C# LINQ-包含子属性的子属性

C# LINQ-包含子属性的子属性,c#,.net,linq,C#,.net,Linq,我的实体中有子属性的子属性。我有一个Get方法: List<T> Find(Expression<Func<T, bool>> where, params Expression<Func<T, object>>[] toInclude); 但是,我希望能够收回ChildC财产,它是我的ChildB财产的一个子财产 是否仍然可以使用我提供的方法签名执行此操作?我知道通常我可以做a.Include(“Child

我的实体中有子属性的子属性。我有一个Get方法:

List<T> Find(Expression<Func<T, bool>> where, 
             params Expression<Func<T, object>>[] toInclude);
但是,我希望能够收回ChildC财产,它是我的ChildB财产的一个子财产

是否仍然可以使用我提供的方法签名执行此操作?我知道通常我可以做a.Include(“ChildB.ChildC”)

编辑:为每个请求添加代码

using(MyContext context = new MyContext())
{
    ObjectQuery<T> objectQuery = (ObjectQuery<T>)context.CreateObjectSet<T>();
    foreach(var include in toInclude)
    {
        objectQuery = objectQuery.Include(include);
    }

    return objectQuery.Where<T>(where);
}
使用(MyContext context=new MyContext())
{
ObjectQuery ObjectQuery=(ObjectQuery)context.CreateObjectSet();
foreach(包括在toInclude中的var)
{
objectQuery=objectQuery.Include(Include);
}
返回objectQuery.Where(Where);
}

如果您谈论的是LINQ to SQL,那么您应该在对其执行任何查询之前配置DataContext

比如:

var options = new DataLoadOptions();
options.LoadWith<ChildB>(b => b.ChildC);
dataContext.LoadOptions = options;
var options=new DataLoadOptions();
options.LoadWith(b=>b.ChildC);
dataContext.LoadOptions=选项;

我正在对实体执行LINQ,但是,我希望开发人员能够传递他们想要包含的导航属性列表,而不必处理Context.brandon-您是否有可能还包括list Find()方法存根的实现??考虑到这一点,我相信我可以在这个问题上做一个像样的尝试。谢谢…好的,我会看一下,看看我是否能“增值”…布兰登-恐怕我找不到一个方法来满足你的要求。真的很难。可能是下载EF源(如果可用)或在reflector下运行它,看看当您尝试包含childb.childc场景时会发生什么(我相信您已经遇到了这种情况,但只是以防万一)。再一次很抱歉在这一次出现“软生菜”,这似乎是一个直截了当的挑战。。
var options = new DataLoadOptions();
options.LoadWith<ChildB>(b => b.ChildC);
dataContext.LoadOptions = options;