Eager Loading包含lambda表达式中的元素列表

时间:2013-04-30 08:15:39

标签: c# linq

您好我正在尝试通过指定需要包含的元素列表来使用预先加载。这是我写的表达式:

public class Prefetch<TEntity>
{
    private readonly List<LambdaExpression> items = new List<LambdaExpression>();

    public Prefetch<TEntity> Include<TPath>(Expression<Func<TEntity, TPath>> path)
    {
        this.items.Add(path);

            return this;
        }
}

 private static IEnumerable<string> GetCoverPrefetch()
    {

         new Prefetch<ContractCoverInstance>().Include(x => x.Tariff.AksAssumptionData.ToList().ForEach(x => x.MortalityTableMainInsuredMale))
    }

我不确定我所写的内容是否正确并且会做我期望的内容并且我无法测试应用程序一段时间因为有一系列编译错误,因为某些模型更改,需要在申请被测试之前得到纠正。

这就是我相信这个表达会做的事情请纠正我如果我错了:

  

对于List中的每个元素导致AksAssumptionData得到   MortalityTableMainInsuredMale并包含它

如果这不正确那么我怎样才能实现我在lambda表达式中所说的内容?

1 个答案:

答案 0 :(得分:0)

  1. items应该是TEntity的列表...为什么你会有一个lambda表达式列表?
  2. 在我看来,你正在使用Include,好像它是一个单身......不是一个好的设计。
  3. 根据签名,
  4. GetCoverPrefetch应该返回IEnumerable<string>,但是您希望字符串包含什么?您没有从函数返回字符串。你只是使用ForEach什么都不做 - 它会给你一个编译错误。您应该使用普通的foreach并使用yield return,或只使用return new Prefetch<ContractCoverInstance>().Include(...),但Include返回的内容不是IEnumerable<string>,而是List<LambdaExpression>
  5. 没有任何意义。即使您正确地从items返回了GetCoverPrefetch() 它只包含你传入的lambda表达式。所以它什么也没做。