我有一个集合,代表每个年龄的人口(男性,女性)。
为了通过时间预测人口,我必须先与女性一起计算,这样我才能根据男性出生率的统计常数来计算新生男女的百分比。
尽管如此,我有第一个矩阵,其中包括男性和女性的每岁人口。
// 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()问答器
如果我在dr.Year
.Take(2)和一个补充的where条件,那么发布于 2011-03-25 20:10:56
实际上,#1可能会产生与当前代码不同的结果。例如,如果顺序是随机的(我在任何地方都没有看到任何排序),则当前代码可能返回任意数量的结果(例如,如果第一个元素不匹配这两个条件,则没有结果,即使后面的条件匹配)。
这听起来更正确(除非你真的想要TakeWhile的行为),你是说你想要的前2个结果符合给定的条件,不管它们是否是最初列表中的第一个结果。
例如
var numbers = new[] {2, 3, 1, 4};
Console.WriteLine("TakeWhile");
foreach(var n in numbers.TakeWhile(x => x == 1 || x == 2))
{
Console.Write(n);
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("WhereTake2");
foreach (var n in numbers.Where(x => x == 1 || x == 2).Take(2))
{
Console.Write(n);
} 指纹:
TakeWhile
2
WhereTake2
21发布于 2011-03-25 20:00:52
我会将子句包含在查询的TakeWhile调用中的where子句中,有理由不这样做吗?从长远来看,两者之间可能没有太大的区别,但TakeWhile似乎没有必要,并且使您的代码更加混乱,IMO。
https://stackoverflow.com/questions/5437455
复制相似问题