C#LINQ获取字段值与字符串数组黑名单不匹配的对象

C#LINQ获取字段值与字符串数组黑名单不匹配的对象,c#,linq,C#,Linq,我有以下代码: public class MyObject { public string Name { get; set; } public MyObject(string name) { Name = name; } } // caller method somewhere public void myMethod() { List<MyObject> myObjects = new List<MyObject>(); myObje

我有以下代码:

public class MyObject {
  public string Name { get; set; }

  public MyObject(string name) {
    Name = name;
  }  
}

// caller method somewhere
public void myMethod() {
  List<MyObject> myObjects = new List<MyObject>();
  myObjects.Add(new MyObject("Jim"));
  myObjects.Add(new MyObject("David"));
  myObjects.Add(new MyObject("Richard"));
  myObjects.Add(new MyObject("Steve"));

  string[] namesToExclude = new string[] { "Jim", "Steve" };
  List<string> strings = myObjects.Select(m => m.Name).Except(namesToExclude).ToList();
  // replace the above line to result in List<MyObject> with 2 items (David, Richard)
}
公共类MyObject{
公共字符串名称{get;set;}
公共MyObject(字符串名称){
名称=名称;
}  
}
//调用方方法
公共方法(){
List myObjects=new List();
添加(新的MyObject(“Jim”));
添加(新的MyObject(“David”));
添加(新的MyObject(“Richard”));
添加(新的MyObject(“Steve”));
字符串[]名称排除=新字符串[]{“Jim”,“Steve”};
List strings=myObjects.Select(m=>m.Name).Except(namesToExclude.ToList();
//将上述行替换为列表中的2项(David,Richard)
}
我想让这最后一行正常工作,这样我就可以将列表作为
列表
而不是
列表
尝试以下操作:

 var objects = 
      myObjects.Where(m => !namesToExclude.Contains(m.Name)).ToList();

这可能有点错误,因为我已经习惯于更多地使用VB.NET,但类似于

(from m in myObjects where !namesToExclude.Contains(m.Name)).ToList()

您可以使用
Except
join
将结果加入原始列表

var allowedObjNames = myObjects.Select(o => o.Name).Except(namesToExclude);
var allowedObject = from o in myObjects join a in allowedObjNames 
                    on o.Name equals a
                    select o;
var allowedObjList = allowedObject.ToList();

将最后一行替换为-

List<MyObject> objects = myObjects.Where(o =>
                           !namesToExclude.Contains(o.Name)).ToList();
List objects=myObjects.Where(o=>
!namesToExclude.Contains(o.Name)).ToList();

我在这里可能不清楚。我想你没有领会我的意思。我不想要字符串列表的结果。我想把物品清单拿回来。上面的代码已经起作用了。是的。这绝对是我要找的!谢谢不是最有效的,而是最短的。谢谢你的回答。非常感谢。
List<MyObject> objects = myObjects.Where(o =>
                           !namesToExclude.Contains(o.Name)).ToList();