2016-03-30 17 views
1

4 satır döngü yazmak yerine LINQ ile yeni bir List (Gerçekte IEnumerable) oluşturmak istiyorum. LINQ'a bir lambda ifadesi verebileceğimi ve bu ifadeyi kullanarak bir listenin elemanlarını haritalayabileceğimi biliyorum, ancak List'un türünü değiştirecek mi?LINQ ile birlikte bir differnet türü tutan bir Liste oluşturma?

// My List of objects 
List<MyDBDocType> myDBDocs = ...; 
// How they are mapped 
BsonDocument myDBDocAsBson = myDBDocs[0].ToBsonDocument(); 
// Function signature that takes a List that holds a separate type 
MyDocCollection.InsertManyAsync([IEnumerable<BsonDocument> documents], ...); 

cevap

3

LINQ bazı yöntemleri vardır, bazı veri türünü değiştirmek olurken bazıları olmaz.

Örneğin, Select maddesi veri tipi değişebilir:

//suppose your MyDBDocType has property called MyInt with data type: int 
var result = myDBDocs.Select(x => x.MyInt); //this will result in IEnumerable<int> 

Ancak Where yöntem olup veri türü korur, bu lambda ifadeye göre sonucu filtreler:

var result = myDBDocs.Select(x => x.MyInt > 3); //this will result in IEnumerable<MyDBDocType> 

Diğer LINQFirst, Last, FirstOrDefault, Except, Intersect, Distinct,gibi yöntemler, SkipWhile, vb. Ayrıca veri tipini değiştirmeyin. Ancak Select ve SelectMany gibi yöntemler, veri tipini değiştirir.

Sizin durumunuzda, yalnızca belirli sonuçları veri türünde hiçbir değişiklik yapmadan orijinal sorgudan filtrelemek isterseniz, Where

İlgili konular