2013-03-13 39 views
3

我想用一個IEnumerable<dynamic>型lambda表達式,howerver其中採用了全新的Lambda表達式IM即時得到的屬性下面的錯誤和座標。IEnumreable動態和lambda

這裏是我的代碼

public static object returnFullSelectWithCoordinates(IEnumerable<dynamic> q) 
     { 
      return q.Select(b => new 
      { 
       route_id = b.b.route_id, 
       name = b.b.name, 
       description = b.b.description, 
       attributes = b.b.route_attributes.Select(c => c.route_attribute_types.attribute_name), 
       coordinates = b.b.coordinates.Select(c => new coordinateToSend { sequence = c.sequence, lat = c.position.Latitude, lon = c.position.Longitude }) 

      }); 

有任何解決方法,使我的方法的工作?

+1

一個'dynamic'作爲公共方法的參數看起來並不像一個好主意IMO – ken2k 2013-03-13 12:27:12

+0

這只是一個測試方法,我試圖找出如何我可以爲選擇匿名類型的LINQ查詢製作「模板」。 – user2049921 2013-03-13 12:28:57

+2

錯誤消息告訴你如何使其工作。 **將lambda轉換爲委託或表達式樹**。 – 2013-03-13 15:22:48

回答

0

由於Select<>是一種擴展方法,它不適用於動態類型。

使用Enumerable.Select<>可以得到相同的結果。

嘗試此查詢:

Enumerable.Select(q,(Func<dynamic,dynamic>)(b => new 
     { 
      route_id = b.b.route_id, 
      name = b.b.name, 
      description = b.b.description, 
      attributes = b.b.route_attributes.Select(c => c.route_attribute_types.attribute_name), 
      coordinates = b.b.coordinates.Select(c => new coordinateToSend { sequence = c.sequence, lat = c.position.Latitude, lon = c.position.Longitude }) 

     });