C# foreach to linq
本文关键字:linq to foreach | 更新日期: 2023-09-27 18:10:27
我想知道这段代码是否有一个最佳的方法。
List<CollectionFormFieldRecord> dataFields = new List<CollectionFormFieldRecord>();
foreach (CollectionRelationModel relation in relations)
{
foreach (var field in visibleFields)
{
if (field.SourceCollectionsID == relation.ChildCollectionID)
dataFields.Add(field);
}
}
当一个字段(visibleFields)有一个存在于关系列表中的SourceCollectionsID
时,该字段必须添加到一个分隔的列表中。
我尝试了一些LINQ,但不知道如何比较属性与列表中的属性。
可以使用linq
dataFields = (from relation in relations
from field in visibleFields
where field.SourceCollectionsID == relation.ChildCollectionID
select field).Select(field => field).ToList();
但是我更喜欢用foreaches
您向我们展示的代码复杂度为0 (N的平方)。尝试使用. join方法,因此由于散列,您将拥有接近O(N)的复杂度。您应该使用的代码是
dataFields = visibleFields.Join(relations, vF => vF.SourceCollectionsID, r => r.ChildCollectionID, (visibleField, relation) => visibleField).ToList();
为了更好地理解复杂性,看看我对这个问题的回答
我可以像这样
var dataFields = dataFields .Where(f => relations.Any(r => f.SourceCollectionsID ==r.ChildCollectionID))
.ToList()