在查询执行期间急切加载集合属性

时间:2010-10-08 17:32:06

标签: c# entity-framework wcf-data-services

是否有办法急切加载查询中提取的实体的子集合,而不必在string方法中将集合的路径指定为Expand

目前我有以下内容:

    foo_entities ctx = new foo_entities(new Uri("http://url/FooService.svc/"));
    ctx.MergeOption = MergeOption.AppendOnly;        
    var things = ctx.Things
                .Expand("ChildCollectionProperty1," +
                        "..." + 
                        "ChildCollectionPropertyN");
    foreach (var item in things)
    {
        foreach (var child in item.ChildCollectionProperty1)
        {
            //do thing
        }
    }  

有没有办法避免将string放在.Expand方法中,或者只是为了避免在我的代码中由于编译器脆弱性而无法创建复制/粘贴的反射?

1 个答案:

答案 0 :(得分:0)

我目前唯一的解决方案是使用反射来构建string方法的.Expand或路径。

foo_entitiesctx = new foo_entities(new Uri("http://url/FooService.svc/"));
ctx.MergeOption = MergeOption.AppendOnly;

var collections = from pi in typeof(TestResult).GetProperties()
                   where IsSubclassOfRawGenericCollection(pi.PropertyType)
                   select pi.Name;

var things = ctx.Things.Expand(string.Join(",", collections));
foreach (var item in things)
{
    foreach (var child in item.ChildCollectionProperty1)
    {
        //do thing
    }
}  

IsSubclassOfRawGenericCollection方法是来自Jared Par on SOIsSubclassOfRawGeneric方法的包装器