Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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_List_Linq_Collections - Fatal编程技术网

C# 使用Linq使用匹配值从另一个列表更新列表

C# 使用Linq使用匹配值从另一个列表更新列表,c#,.net,list,linq,collections,C#,.net,List,Linq,Collections,当我从另一个源查询上下文时,我希望更新列表中的值 我可以通过两种不同的查询方式找到匹配项 var r = from aa in context.Persons.GetItems() join bb in findPersonViewModel.findPersonResultsViewModel on aa.PersonId equals bb.PersonID select aa; 或 为了简单起见,我缩短了模型 public class FindPerson

当我从另一个源查询上下文时,我希望更新列表中的值

我可以通过两种不同的查询方式找到匹配项

var r = from aa in context.Persons.GetItems()
        join bb in findPersonViewModel.findPersonResultsViewModel on aa.PersonId equals bb.PersonID
        select aa;

为了简单起见,我缩短了模型

public class FindPersonResultsViewModel
{
    public int PersonID { get; set; }
    public bool ExistInContactManager { get; set; }
    public bool ActionType { get; set; }
}

public class PersonViewModel
{
     public int PersonID { get; set; }
}
目标:如果PersonID匹配,则更新FindPersonResultsViewModel,使
现有ContactManager
ActionType
均为
True

下面是一个用于可视化分析的数据示例

var findPersonResultsViewModel = new List<FindPersonResultsViewModel>()
    { new FindPersonResultsViewModel { PersonID = 2, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 3, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 4, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 5, ActionType = false, ExistInContactManager = false },
      new FindPersonResultsViewModel { PersonID = 6, ActionType = false, ExistInContactManager = false },
    };



var personModel = new List<PersonViewModel>()
    { new PersonViewModel { PersonID = 2 },
      new PersonViewModel { PersonID = 6 },
      new PersonViewModel { PersonID = 8 },
      new PersonViewModel { PersonID = 9 },
      new PersonViewModel { PersonID = 12 },
      new PersonViewModel { PersonID = 22 },
      new PersonViewModel { PersonID = 32 },
      new PersonViewModel { PersonID = 42 },
    };
var findPersonResultsViewModel=new List()
{new FindPersonResultsViewModel{PersonID=2,ActionType=false,ExistInContactManager=false},
新建FindPersonResultsViewModel{PersonID=3,ActionType=false,ExistInContactManager=false},
新建FindPersonResultsViewModel{PersonID=4,ActionType=false,ExistInContactManager=false},
新的FindPersonResultsViewModel{PersonID=5,ActionType=false,ExistInContactManager=false},
新建FindPersonResultsViewModel{PersonID=6,ActionType=false,ExistInContactManager=false},
};
var personModel=新列表()
{new PersonViewModel{PersonID=2},
新PersonViewModel{PersonID=6},
新PersonViewModel{PersonID=8},
新PersonViewModel{PersonID=9},
新PersonViewModel{PersonID=12},
新PersonViewModel{PersonID=22},
新PersonViewModel{PersonID=32},
新PersonViewModel{PersonID=42},
};

如果我理解你的要求。。。您可以只使用
Contains
foreach

var ids = personModel.Select(x => x.PersonID);

var results = findPersonResultsViewModel.Where(x => ids.Contains(x.PersonID));

foreach (var item in results)
{
   item.ActionType = true;       
   item.ExistInContactManager = true
}

db.SaveChanges();
var results =
   from pr in findPersonResultsViewModel
   join p in personModel on pr.PersonID equals p.PersonID
   select pr;

foreach (var item in results)
{
   item.ActionType = true;
   item.ExistInContactManager = true;
}

db.SaveChanges();
或者,您可以通过使用
加入
,并使用
foreach

var ids = personModel.Select(x => x.PersonID);

var results = findPersonResultsViewModel.Where(x => ids.Contains(x.PersonID));

foreach (var item in results)
{
   item.ActionType = true;       
   item.ExistInContactManager = true
}

db.SaveChanges();
var results =
   from pr in findPersonResultsViewModel
   join p in personModel on pr.PersonID equals p.PersonID
   select pr;

foreach (var item in results)
{
   item.ActionType = true;
   item.ExistInContactManager = true;
}

db.SaveChanges();
输出

PersonID : 2, ActionType :True, ExistInContactManager :True
PersonID : 3, ActionType :False, ExistInContactManager :False
PersonID : 4, ActionType :False, ExistInContactManager :False
PersonID : 5, ActionType :False, ExistInContactManager :False
PersonID : 6, ActionType :True, ExistInContactManager :True

Upvote为包含的数据、类和effortLinq提供查询功能(过滤、加入等,最终目的是选择某些内容),而不是updating@RufusL是的,但是我插入了。明白了。如果我现在想更新记录,并且基本上我有两个列表,我找到了记录,我如何更新?某种类型的循环?例如?@RufusL,这不取决于用途吗?是什么阻止我继续寻找匹配项和选择并保存更改的管道?@ChiefTwoPencils这正是我所想的……我现在唯一的问题是,我希望仍然使用我的原始模型在UI网格上显示(findPersonResultsViewModel中的所有数据)现在我有一个单独的结果,是孤立的。你不会知道的,因为我没说。。。在这种情况下,我不会做任何更改。想法?@ChadJacobs都是内存中的列表?因此本质上我应该更新foreach中的
findPersonViewModel.findPersonResultsViewModel
?不,上下文.Persons.GetItems()不在内存中memory@ChadJacobs是的,所以基本上你可能想使用第一个(如果我理解你的话)加载Persons.GetItems(),获取ID,对FindPersonResultsViewModels列表执行包含操作,然后使用foreach更新。