2014-05-13 3 views
0

다음 클래스가 있다고 가정 해 봅시다.특정 조건으로 목록에서 사용자 정의 인스턴스를 선택하십시오.

class Wedding 
{ 
    public DateTime When { get; set; } 
    public string Where { get; set; } 
} 

그리고 나는 이런 종류의 요소 목록을 가지고 있습니다.

List<Wedding> weddings = GetWeddings(...); 

어딘가에서 우리는 목록을 얻었습니다.

이 경우 나는 특정 datetime의 결혼식이 목록에 있는지 (bool) 쉽게 알 수있는 방법을 사용하고자합니다. 마찬가지로 :

public bool WeddingInList(List<Weddings> list, DateTime dateTime) 
{ 
    return list.Contains(...) 
} 

나는

어떤 도움

이 감사 ... Linq에와 Func을 잘 알고 아니에요 감사합니다.

+0

제목과 질문은 어떻게 일치합니까? 당신의 시도는 무엇이고 당신의 문제는 정확히 무엇입니까? – nvoigt

+0

왜 WCF에 대한 질문 제목입니까? 실제 질문과 일치하도록 편집하십시오 –

+0

stackoverflow가 이전에 묻지 않은 질문을 저장했기 때문에 ... 그리고 결백하게 남겨 두었습니다 ... 죄송합니다. 수정되었습니다. –

답변

2
DateTime check; 

bool weddingExistsAtCheckDate = weddings.Any(wedding => wedding.When == check); 

명확화 :

Any있어서, 상기 컨테이너에있는 클래스 인 T에 대한 Func<T, bool> 걸린다.

당신이 기능을

bool SomeFunc(Wedding wedding) { return wedding.When == check } 

있었다 가정 당신은 통과 할 수 :

bool weddingExistsAtCheckDate = weddings.Any(SomeFunc); 

그러나, 당신이 어떻게 든에 check를 얻을 수있을 것입니다. 어쨌든, 위의 기능이 단축 될 수있다 : 다시로 단축 할 수

bool weddingExistsAtCheckDate = weddings.Any((Wedding wedding) => { return wedding.When == check }); 

:

bool weddingExistsAtCheckDate = weddings.Any(wedding => wedding.When == check); 

다른 모든 구문은 컴파일러가 이미 어쨌든 알고 뭔가 ... 무엇 때문에 그리고 그것은 불평했을 것이다.

결과 짧은 버전을 lambda expression이라고합니다.

+0

대단히 고마워요. 그것은 작동합니다. 그리고 '결혼'변수가 정확히 어디에서 오는가? 선언 된 곳은 어디입니까? –

+1

@ 덧글 : 그것은 람다 구문의 일부입니다 : http://msdn.microsoft.com/en-us/library/bb397687.aspx –

1

nvoigt 답변 외에, 당신은 방법에 그것을 원한다고 말했다. 같은 네임 스페이스 어딘가에 외부

public static class extension 
{ 
    public static bool IsInWeddingList(this IEnumerable<Wedding> weds, DateTime check) 
    { 
     return weds.Any(wedding => wedding.When == check); 
    } 
} 

을이 클래스를 선언

하고이 같이 당신의 결혼식 목록에 메소드의 호출 당신은 람다 식을 때마다 사용할 필요가 없습니다 있도록 확장 방법을 사용할 수 있습니다 :

 List<Wedding> weddings = GetWeddings(...); 
     DateTime check=DateTime.Now; //some date 
     bool result=weddings.IsInWeddingList(check);