使用LINQ和EF获取相关对象

时间:2012-04-29 16:25:49

标签: c# linq entity-framework

我有两个通过外键关系链接的对象,我使用DataModel映射对象:

事件:1 ------ *:资产

我写了一个查询来获取给定[eventPublicId]

的所有资产
List<Asset> assetList =
    ReliableExecution.RetryWithExpression<Event, List<Asset>>
    (u => u.FirstOrDefault(x => x.PublicId == eventPublicId).Assets.ToList()).ToList();

我的问题是我不得不两次调用ToList(),这看起来很尴尬。另外我不得不使用FirstOrDefault,但是当我尝试使用[Where]或其他任何东西时,它都没有编译。

还有其他更好的方法可以重写此代码吗?

这是RetryWithExpression签名以供参考:

public static TValue RetryWithExpression<T, TValue>(Func<ObjectSet<T>, TValue> func, Int32 retryInfiniteLoopGuard = 0)
         where T : class

1 个答案:

答案 0 :(得分:1)

您指定func参数应返回List<Asset>,因此导航属性event.Assets不符合帐单:它是EntityCollection<Asset>,其中不能隐式转换为委托返回类型显式转换ToList()创建指定的类型。

从技术上讲,要删除ToList,您应该使用

ReliableExecution.RetryWithExpression<Event, EntityCollection<Asset>> ...

但我不知道这是否符合您的功能要求。