无法使用use . except在两个List上
本文关键字:List 两个 String use except | 更新日期: 2023-09-27 18:18:31
我正在做一个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,System.Collections.Generic.IEnumerable)'有一些无效的参数
错误3实例参数:不能转换"System.Collections.Generic.List>"System.Linq.IQueryable"
在我看来
var allcurrentresourcename = scaninfo.Select(a => a.VMList.Select(a2 => a2.Resource.RESOURCENAME)).ToList();
根本不是您所期望的字符串列表。scaninfo
为List<ScanInfo>
型,λ表达式
a => a.VMList.Select(a2 => a2.Resource.RESOURCENAME)
为每个ScanInfo
对象生成一个IEnumerable<TSomething>
。因此,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()