C#每辆车到林克

C#每辆车到林克,c#,linq,foreach,C#,Linq,Foreach,我想知道对于这段代码是否没有一个最佳的方法 List<CollectionFormFieldRecord> dataFields = new List<CollectionFormFieldRecord>(); foreach (CollectionRelationModel relation in relations) { foreach (var field in visibleFields) { if (field.Sourc

我想知道对于这段代码是否没有一个最佳的方法

List<CollectionFormFieldRecord> dataFields = new List<CollectionFormFieldRecord>();
foreach (CollectionRelationModel relation in relations)
{
     foreach (var field in visibleFields)
     {
          if (field.SourceCollectionsID == relation.ChildCollectionID)
            dataFields.Add(field);
     }
}
List dataFields=newlist();
foreach(关系中的CollectionRelationModel关系)
{
foreach(visibleFields中的变量字段)
{
if(field.sourceCollectionId==relation.ChildCollectionID)
dataFields.Add(字段);
}
}
如果字段(visibleFields)的关系列表中存在
SourceCollectionId
,则必须将该字段添加到单独的列表中


我试着用LINQ做了一些事情,但不知道如何将属性与列表中的属性进行比较

您可以使用linq执行此操作

dataFields = (from relation in relations 
                    from field in visibleFields 
                    where field.SourceCollectionsID == relation.ChildCollectionID 
                    select field).Select(field => field).ToList();

但是我更喜欢用foreaches来代替

你可以用linq来做

dataFields = (from relation in relations 
                    from field in visibleFields 
                    where field.SourceCollectionsID == relation.ChildCollectionID 
                    select field).Select(field => field).ToList();

但是我更喜欢用foreaches来代替

你可以用linq来做

dataFields = (from relation in relations 
                    from field in visibleFields 
                    where field.SourceCollectionsID == relation.ChildCollectionID 
                    select field).Select(field => field).ToList();

但是我更喜欢用foreaches来代替

你可以用linq来做

dataFields = (from relation in relations 
                    from field in visibleFields 
                    where field.SourceCollectionsID == relation.ChildCollectionID 
                    select field).Select(field => field).ToList();

但是我更喜欢用前额疼痛来代替

我可以和这个类似

var dataFields = dataFields .Where(f => relations.Any(r => f.SourceCollectionsID ==r.ChildCollectionID))
                .ToList()

我可以像这样

var dataFields = dataFields .Where(f => relations.Any(r => f.SourceCollectionsID ==r.ChildCollectionID))
                .ToList()

我可以像这样

var dataFields = dataFields .Where(f => relations.Any(r => f.SourceCollectionsID ==r.ChildCollectionID))
                .ToList()

我可以像这样

var dataFields = dataFields .Where(f => relations.Any(r => f.SourceCollectionsID ==r.ChildCollectionID))
                .ToList()

你给我们看的代码有O(N平方)的复杂度。尝试使用.Join方法,这样由于散列,您的复杂性将接近O(N)。您应该使用的代码是

dataFields = visibleFields.Join(relations, vF => vF.SourceCollectionsID, r => r.ChildCollectionID, (visibleField, relation) => visibleField).ToList();

为了更好地理解复杂性,请看我的答案。

您向我们展示的代码的复杂性为O(N平方)。尝试使用.Join方法,这样由于散列,您的复杂性将接近O(N)。您应该使用的代码是

dataFields = visibleFields.Join(relations, vF => vF.SourceCollectionsID, r => r.ChildCollectionID, (visibleField, relation) => visibleField).ToList();

为了更好地理解复杂性,请看我的答案。

您向我们展示的代码的复杂性为O(N平方)。尝试使用.Join方法,这样由于散列,您的复杂性将接近O(N)。您应该使用的代码是

dataFields = visibleFields.Join(relations, vF => vF.SourceCollectionsID, r => r.ChildCollectionID, (visibleField, relation) => visibleField).ToList();

为了更好地理解复杂性,请看我的答案。

您向我们展示的代码的复杂性为O(N平方)。尝试使用.Join方法,这样由于散列,您的复杂性将接近O(N)。您应该使用的代码是

dataFields = visibleFields.Join(relations, vF => vF.SourceCollectionsID, r => r.ChildCollectionID, (visibleField, relation) => visibleField).ToList();

为了更好地理解复杂性,请查看我的答案,了解

可能重复的可能重复的可能重复的可能重复的可能重复的可能重复的你为什么喜欢前肢疼痛?我以为林克可以表现得更好?@PJDW不,这不是为什么你更喜欢前肢疼痛?我以为林克可以表现得更好?@PJDW不,这不是为什么你更喜欢前肢疼痛?我以为林克可以表现得更好?@PJDW不,这不是为什么你更喜欢前肢疼痛?我以为林克可以表现得更好?@PJDW不,不是