2012-10-24 2 views
2

일치하지 않는 필드 값을 가진 개체를 얻을 나는 다음과 같은 코드가 있습니다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>(); 
    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) 
} 

내가이 마지막 줄은 그래서이 같은 목록을 다시 얻을 수있는 작업을 좀하고 싶습니다를 List<string> 대신 List<MyObject>이 필요합니다.

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

답변

7

이 시도 Exceptjoin 결과는 원래 목록에 있습니다.

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(); 
+0

여기에 분명하지 않을 수 있습니다. 나는 네가 내 요점을 놓친 것 같아. 나는 문자열 목록의 결과를 원하지 않는다. 나는 물건의 목록을 다시 얻고 싶다. 위의 코드는 이미 작동합니다. –

+0

편집보기 : 결과는 문자열 목록이 아닙니다 – thumbmunkeys

+0

예. 이것은 내가 찾고 있었던 것이 분명합니다! 감사! –

2

이 약간 틀릴 수도 있지만 뭔가 :

2
var objs = myObjects.Where(m => !namesToExclude.Contains(m.Name)).ToList(); 
3

당신은 사용할 수 있습니다 ... 같은 좀 더 VB.NET을 사용하여 익숙해로

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

이 또한 통찰력있는 답변 주셔서 감사합니다. 매우 감사. –

2

마지막 줄 바꾸기 -