UFO ET IT

LINQ 결과를 ObservableCollection으로 캐스팅

ufoet 2020. 12. 7. 21:16
반응형

LINQ 결과를 ObservableCollection으로 캐스팅


그것이 LINQ 결과라는 사실은 아마도 질문과 관련이 없을 수도 있지만 어쨌든 언급하고 있습니다-이것이이 질문을 초래 한 컨텍스트이기 때문입니다.

LINQ 쿼리를 실행합니다. 결과는 다음과 같습니다.

IEnumerable<MyClass> 

결과를 ObservableCollection에 넣고 싶습니다.

ObservableCollection<MyClass> 

이 캐스트는 어떻게하나요? (IEnumerable을 통해 실행하고 요소를 ObservableCollection에 복사하지 않고). LINQ에 몇 가지 To .. () 함수가 있지만이 캐스트에는 도움이되지 않는 것 같습니다 ..?


다음을 사용하십시오.

ObservableCollection<Foo> x = new ObservableCollection<Foo>(enumerable);

그러면 필요한 복사가 수행됩니다. 라이브 쿼리의 변경 사항을 관찰 할 수있는 방법은 없습니다.하지만의 아이디어 ObservableQuery<T>는 흥미롭지 만 도전적입니다.

확장 방법을 사용하려면 간단합니다.

public static ObservableCollection<T> ToObservableCollection<T>
    (this IEnumerable<T> source)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }
    return new ObservableCollection<T>(source);
}

var linqResults = foos.Where(f => f.Name == "Widget");

var observable = new ObservableCollection<Foo>(linqResults);

이를 위해 ObservableCollection 생성자사용할 수 있습니다 .

ObservableCollection<MyClass> obsCol = 
        new ObservableCollection<MyClass>(myIEnumerable);

IEnumerable은 인터페이스입니다.

IEnumerable의 콘텐츠를 ObservableCollection으로 복사해야합니다. 새 것을 만들 때 IEnumerable을 ObersvableCollection의 생성자에 전달하여이를 수행 할 수 있습니다.


저는이 도서관을 몇 년 전에 썼습니다.

https://github.com/wasabii/OLinq

당신이 원하는 것을 정확히하는 것이 아니라 더 많은 일을합니다. 식 트리를 구문 분석하고 참조 된 컬렉션에 연결하며 변경시 이벤트를 생성하는 다른 컬렉션을 노출하는 Linq 쿼리 공급자입니다.

Linq 연산자 몇 개가 누락되었습니다. 그러나 코드 기반은 확장하기 어렵지 않습니다.

참고 URL : https://stackoverflow.com/questions/1465285/cast-linq-result-to-observablecollection

반응형