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,但不知道如何比较属性与列表中的属性。

C# foreach to 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()