【问题标题】:intersection of two list add to another list in mvc两个列表的交集添加到 mvc 中的另一个列表
【发布时间】:2016-02-05 05:23:58
【问题描述】:

我有以下列表

List<AspNetUser> approverprofiles = db.AspNetUsers.Where(w => w.Subsidary_ID =="04").ToList();

List<AspNetRole> approverusers = db.AspNetRoles.Where(w => w.Name == "Approver").ToList();

approverprofilesAspNetUser LIST 和 approverusersAspNetRole LIST ,如何将这两个列表合并或添加到一个列表中?

【问题讨论】:

标签: c# asp.net-mvc linq list asp.net-identity


【解决方案1】:

您可以将其序列化为一个类,而不是合并或添加-

Public Class MergeClass {

  public List<AspNetUser> AspNetUsers {get;set;}
  public List<AspNetRole> AspNetRoles {get;set;}

}

现在-

var mergeList= new MergeClass {
  AspNetUsers= approverprofiles.ToList(),
  AspNetRoles=  approverusers.ToList()
}

编辑

向现有类添加对象很简单

Public Class MergeClass {

  public List<AspNetUser> AspNetUsers {get;set;}
  public List<AspNetRole> AspNetRoles {get;set;}
  public string MyObject {get;set;}
}

然后你就可以使用它了-

  var mergeList= new MergeClass {
      AspNetUsers= approverprofiles.ToList(),
      AspNetRoles=  approverusers.ToList(),
      MyObject= "someString"
  }

访问属性-

var aspNetUsersFromMergedList = MergeClass.AspNetUsers.Select(a=>a.Id))

根据你的循环问题,你可以访问这样的属性-

foreach(var approvermail in MergeClass.AspNetUsers.ToList(){
   //do something
}

【讨论】:

  • 但是如何将对象添加到这个新的mergeList ??
  • 一旦我使用你的方法,这里就会弹出另一个问题。我有一个像这样的循环foreach (var approvermail in mergeList){ 但在这里我收到了这个错误foreach statement cannot operate on variables of type 'project_namea.Models.MergeClass' because 'project_name.Models.MergeClass' does not contain a public definition for 'GetEnumerator'
  • @kez,您是否已公开访问MergeClass 属性?
  • public class MergeClass {public List&lt;AspNetUser&gt; AspNetUsers { get; set; } public List&lt;AspNetRole&gt; AspNetRoles { get; set; }} 是的,我是这样定义的,我该怎么办?
  • 对不起,你理解错了,可能是我的解释错误,我想添加来自List&lt;AspNetUser&gt; approverprofiles = db.AspNetUsers.Where(w =&gt; w.Subsidary_ID =="04").ToList();List&lt;AspNetRole&gt; approverusers = db.AspNetRoles.Where(w =&gt; w.Name == "Approver").ToList();的对象
【解决方案2】:

试试

approverprofiles = approverprofiles .Concat(approverusers ).ToList();

Concat 返回一个IEnumerable&lt;T&gt;,即两个列表放在一起,它不会修改任何现有列表。此外,由于它返回一个 IEnumerable,如果你想将它分配给一个变量 List&lt;T&gt;,,你必须在返回的 IEnumerable&lt;T&gt; 上调用 ToList()

或者你可以试试

approverprofiles.AddRange(approverusers)

【讨论】:

  • 你怎么能?您可以添加或连接 2 个不同的表吗?可以给我参考一下吗?
【解决方案3】:
List<AspNetUser> approverprofiles = db.AspNetUsers.Where(w => w.Subsidary_ID =="04").ToList();

List<AspNetRole> approverusers = db.AspNetRoles.Where(w => w.Name == "Approver").ToList();

approverprofiles.AddRange(approverusers);

【讨论】:

  • 这些列表类型不同。它一定会失败
【解决方案4】:

使用下面的内置函数将第二个列表添加到第一个列表。

approverprofiles.AddRange(approverusers);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多