繁体   English   中英

C#foreach到Linq

[英]C# foreach to linq

我想知道这段代码是否没有最佳方法。

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

您向我们展示的代码的复杂度为O(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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM