[asp.net-mvc]无法使用。除了在两个列表

发布时间: 2017/3/25 10:38:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我正在对 asp.net mvc 5 web 应用。这两个模型上课:-

public class ScanInfo
    {
        public TMSServer TMSServer { set; get; }
        public Resource Resource { set; get; }
        public List<ScanInfoVM> VMList { set; get; }
    }



 public class ScanInfoVM
    {
        public TMSVirtualMachine TMSVM { set; get; }
        public Resource Resource { set; get; }
    }

和我有下面的方法:-

    List<ScanInfo> scaninfo = new List<ScanInfo>();

    List<String> CurrentresourcesNames = new List<String>();


    for (int i = 0; i < results3.Count; i++)//loop through the returned vm names
         {


            var vmname = results3[i].BaseObject == null ? results3[i].Guest.HostName : results3[i].BaseObject.Guest.HostName;//get the name

            if (!String.IsNullOrEmpty(vmname))
                 {
                   if (scaninfo.Any(a => a.VMList.Any(a2 => a2.Resource.RESOURCENAME.ToLower() == vmname.ToLower())))

                       {

                         CurrentresourcesNames.Add(vmname);
                       }   

                  }

        }
  var allcurrentresourcename = scaninfo.Select(a => a.VMList.Select(a2 => a2.Resource.RESOURCENAME)).ToList();
  var finallist = allcurrentresourcename.Except(CurrentresourcesNames).ToList();

现在我想要里面的所有字符串 allcurrentrecoursename 列出但不是内 CurrentresourcesName

但是,以上代码引发下列异常:-

错误 4 ' System.Collections.Generic.List >' 不包含一个定义为 '除了' 和最佳的扩展方法重载 'System.Linq.Queryable.Except (System.Linq.IQueryable,如)' 有一些无效参数

错误 3 实例论证︰ 不能从转换 ' System.Collections.Generic.List >' 到 'System.Linq.IQueryable'

解决方法 1:

它看起来像我

var allcurrentresourcename = scaninfo.Select(a => a.VMList.Select(a2 => a2.Resource.RESOURCENAME)).ToList();

不是都像你似乎更希望它是字符串列表。scaninfoList<ScanInfo> ,和 lambda 表达式

a => a.VMList.Select(a2 => a2.Resource.RESOURCENAME)

产生一个 IEnumerable<TSomething> 为每个 ScanInfo 对象。这样看来, allcurrentresourcename 不是 List<string> ,而是 List<IEnumerable<TSomething>> ,其中 TSomething 是新型的 RESOURCENAME (最有可能 string )。

编辑︰ 你大概是想要在这里使用的是 SelectMany LINQ 方法 (见 @pquest 的评论)。它铺平你获取到的资源名称,然后您可以使用"一大列表"列表 Except 上︰

var allcurrentresourcename = scaninfo.SelectMany(a => a.VMList.Select(
    b => b.Resource.RESOURCENAME));

你甚至不需要 ToList() 在行的结尾。

官方微信
官方QQ群
31647020