C# 如何将该代码切换到使用LINQ
我知道这是使用LINQ而不是迭代循环,我可以修改这段代码来使用LINQ吗C# 如何将该代码切换到使用LINQ,c#,.net,linq,C#,.net,Linq,我知道这是使用LINQ而不是迭代循环,我可以修改这段代码来使用LINQ吗 List<string> priorsLstIDs = ServiceUtil.extractColumnValuesAsStringVals(tqrPriors,Helper.STUDY_ID); List<DateTime> priorsLstDates = ServiceUtil.extractColumnValuesAsDateTimeVals(tqrPriors, "STUDY_DATE"
List<string> priorsLstIDs = ServiceUtil.extractColumnValuesAsStringVals(tqrPriors,Helper.STUDY_ID);
List<DateTime> priorsLstDates = ServiceUtil.extractColumnValuesAsDateTimeVals(tqrPriors, "STUDY_DATE");
List<PriorElemSt> priorsElemLst = new List<PriorElemSt>(priorsLstIDs.Count);
PriorElemSt elem;
for (int i = 0; i < priorsLstIDs.Count; i++)
{
elem = new PriorElemSt(priorsLstIDs[i], priorsLstDates[i]);
priorsElemLst.Add(elem);
}
return filterStudyPriors(priorsElemLst);
List priorsltids=ServiceUtil.extractColumnValuesStringVals(tqrPriors,Helper.STUDY\u ID);
List priorsltdates=ServiceUtil.extractColumnValuesDateTimeVals(tqrPriors,“研究日期”);
List priorsElemLst=新列表(PRIORSTLIDS.Count);
首要要素;
for(int i=0;i
谢谢
更新:对filterStudyPriors()
方法的调用是否可以作为LINQ的一部分?IEnumerable priorsElemLst=priorsLstIDs.Select((s,i)=>new PriorElemSt(s,priorsltdate[i]);
IEnumerable<PriorElemSt> priorsElemLst = priorsLstIDs.Select((s,i) => new PriorElemSt(s, priorsLstDates[i]));
return filterStudyPriors(priorsElemLst);
返回过滤器研究优先顺序(优先顺序);
您可以使用该方法
在上述语句中,
i
是priorsltids中的项目,d
是priorsltdates中的项目。它们将使用它们在列表中的位置“压缩”在一起。这根本不是最佳做法,但前提是您认为这将提高可读性,防止性能损失
LINQto对象通常会增加一些边际开销(多个迭代器等)。它仍然必须执行循环,并进行委托调用,通常还必须执行一些额外的解引用以获取捕获的变量等
您可以使用如下方法:
//first get the range of indexes
var range = Enumerable.Range(0, priorsLstIDs.Count);
//now project a list of elements at each index
var priorsElemLst = range.Select(i => new PriorElemSt(priorsLstIDs[i], priorsLstDates[i])).ToList();
不要仅仅因为你读到了这是一个很好的练习就切换。例如,在紧循环中,迭代代码可以更快。在某些情况下,迭代循环对于其他人来说更容易修改。不要因为你有锤子就把一切都变成钉子。@Delashmate:这个方法的主体是什么?签名是IEnumerable@Delashmate:那么我的答案的第二部分更适合你。这不会编译,在您的答案中,
i
将是一个字符串,但需要是一个整数才能作为索引传递到列表。@DoctaJonez:现在它将是。谢谢。你可以把它缩短,因为s
已经是priorsLstIDs[i]
//first get the range of indexes
var range = Enumerable.Range(0, priorsLstIDs.Count);
//now project a list of elements at each index
var priorsElemLst = range.Select(i => new PriorElemSt(priorsLstIDs[i], priorsLstDates[i])).ToList();