Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将该代码切换到使用LINQ_C#_.net_Linq - Fatal编程技术网

C# 如何将该代码切换到使用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"

我知道这是使用LINQ而不是迭代循环,我可以修改这段代码来使用LINQ吗

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();