2010-02-26 5 views
6

익명 형식을 반환하는 LINQ 문이 있습니다. 이 유형을 Silverlight 응용 프로그램의 ObservableCollection으로 가져와야합니다. 그러나 가장 가까운 곳에서 찾을 수 있습니다C# - 익명 형식을 observablecollection으로 변환

List myObjects;

누군가이 작업 방법을 알려 줄 수 있습니까?

ObservableCollection<MyTasks> visibleTasks = e.Result; 
var filteredResults = from visibleTask in visibleTasks 
         select visibleTask; 

filteredResults = filteredResults.Where(p => p.DueDate == DateTime.Today); 
visibleTasks = filteredResults.ToList(); // This throws a compile time error 

어떻게 익명 형식에서 관찰 가능한 컬렉션으로 이동할 수 있습니까?

는 감사

답변

6

을 어떤 IEnumerable<T>ObservableCollection<T>으로 변환하는 일반적인 방법을 쓸 수 있음을 시사합니다. 이것은 생성자를 사용하여 ObservableCollection의 새 인스턴스를 만드는 것보다 중요한 이점이 있습니다. C# 컴파일러는 메서드를 호출 할 때 제네릭 형식 매개 변수를 자동으로 추론 할 수 있으므로 요소 유형을 쓸 필요가 없습니다. 이렇게하면 익명 형식의 컬렉션을 만들 수 있습니다. 예를 들어 생성자를 사용할 때는 익명 형식의 컬렉션을 만들 수 있습니다.

Ekin의 버전보다 향상된 점은 확장 메서드로 메서드를 작성하는 것입니다. 일반적인 명명 패턴을 따르는 것은 (예 ToList 또는 ToArray로), 우리는 그것을 ToObservableCollection를 호출 할 수

var oc = 
    (from t in visibleTasks 
    where t.IsSomething == true 
    select new { Name = t.TaskName, Whatever = t.Foo } 
).ToObservableCollection(); 
+0

제네릭을 사용하지 않고이를 수행 할 수있는 방법이 있습니까? 즉, 인라인 코드를 사용하고 실제 유형을 만들지 않고 말입니다. ObservableCollection 같은 것? – v1n1akabozo

0

당신이 확인 개체가 참으로 ObservableCollection입니다 있습니까? 그렇다면, 당신은 단지 캐스트 할 수 있습니다 : visibleTasks = (ObservableCollection)filteredResults;

1

그냥이 작업을 수행 할 수 있어야한다 :

타입 추론 기능을 사용하여 일을 할 것 같은
visibleTasks = new ObservableCollection<MyTasks>(filteredResults); 
2

뭔가 : EKIN으로

private static ObservableCollection<T> CreateObservable<T>(IEnumerable<T> enumerable) 
{ 
    return new ObservableCollection<T>(enumerable); 
} 

static void Main(string[] args) 
{ 

    var oc = CreateObservable(args.Where(s => s.Length == 5)); 
} 
0
:

static ObservableCollection<T> ToObservableCollection<T> 
    (this IEnumerable<T> en) { 
    return new ObservableCollection<T>(en); 
} 

이제 익명 형식이 같은 LINQ 쿼리에서 반환이 포함 된 관찰 컬렉션을 만들 수 있습니다

시도 :

var filteredResults = from visibleTask in visibleTasks 
         where(p => p.DueDate == DateTime.Today) 
         select visibleTask).ToList(); 

(filteredResults이 원하는 목록을 포함합니다)

관련 문제