.net - .Take() 还是不.Take(),这是个问题

标签 .net linq .net-3.5 ienumerable

我有一个代表每个年龄段的人口(M,F)的集合。

为了通过时间来预测人口,我必须首先对女性进行计算,以便我可以根据男性出生率的统计常数来计算新出生的男性和女性的百分比。

也就是说,我有一个包含每岁男性和女性人口的第一个矩阵。

// Where 1 is the evaluation Id and 2009 the year I want the 
// initial population information for.
IList<AnnualPopulation> initialPopulation = 
    LoadMatrix<AnnualPopulation>(1, 2009);

现在,为了首先预测女性人口,我使用以下内容:
IList<AnnualPopulation> initialWomenPopulation = (
        from w in initialPopulation
        where String.Equals("F", w.Gender)
        select w
    ).FirstOrDefault();

我必须考虑当前(初始年份(2009 年))和我希望预测的年份的死亡率,我已经从中获得了各年龄段的死亡率。
IList<AnnualDeathRate> deathRates = LoadMatrix<AnnualDeathRate>(1, 2009)

这加载了 2009 年及以后每个年龄的死亡率。因此,为了仅考虑 2009 年和 2010 年,假设我使用了以下 Linq 代码。
AnnualDeathRate[] femaleDeathRates = (
        from fdr in deathRates
        where (string.Equals("F", fdr.Gender))
        select fdr
    ).TakeWhile(dr => 
        initialWomenPopulation.Year == dr.Year || 
        dr.Year == initialWomenPopulation.Year + 1
    ).ToArray()

Questions


  • 如果我用过 .Take(2) 会更好吗?连同补充 where dr.Year 上的条件?
  • 有没有更好的选择?
  • 我的方法值得考虑吗?
  • 最佳答案

    我会在您的 TakeWhile 中包含该条款调用 where查询的子句,是否有理由不这样做?从长远来看,两者之间可能没有太大区别,但TakeWhile似乎没有必要并使您的代码更加困惑,IMO。

    关于.net - .Take() 还是不.Take(),这是个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437455/

    相关文章:

    .net - 如何使用 VS2008 进行编译以便二进制文件不需要 .NET?

    c# - SortedDictionary 按键的相反顺序

    asp.net - 如何通过 LINQ 获得一级子级

    c# - 使用 WildCard 加载 System.IO.FileStream

    c# - 测试一个值是否包含在 Dictionary<TKey, List<TValue>> 中

    c# - .NET中的注册页面错误

    .net - .net 4.0 中即将出现的 'dynamic' 关键字将如何让我的生活更美好?

    c# - 在 C# 中使用 .NET 3.5 将数据集转换为 JSON

    c# - 使用 LINQ 访问存储过程值。 Entity Framework 5,数据库优先

    c# - IEnumerable<IEnumerable<T>> 中一个属性的平均值的 IEnumerable,其中 T 有两个属性