2013-11-15 1 views
1

나는 아래 linq 쿼리 있습니다. 분명히 좋지 않은 다른 3 곳의 비슷한 쿼리가 있습니다. 그래서 메소드에 tfID를 전달하려고합니다. 메서드에 매개 변수로 var를 전달할 수 없다는 것을 알고 있습니다.C# Linq 쿼리가 사전에 형식을 반환

var tfID = from orderItem in _orderBlock.Orders 
          join assetItem in tfEntity.AssetDetails on orderItem.Security.ID equals assetItem.sISIN 
          where orderItem.IdenitfierUsed == "I" 
          where assetItem.iSkeletal == 1 
          select new { orderItem, assetItem }; 

위의 쿼리를 다음과 같이 변경하려고합니다. 내가 얻을 그러나 오류 메시지가 System.Collections.Generic.Dictionary '명시 적 변환 (당신이 캐스트를 누락)가 존재하지 공모 유형을 변환 할 수 있습니다 "'에 System.Collections.Generic.IEnumerable '입니다.

Dictionary<Order, AssetDetail> ordersDictionary = new Dictionary<Order, AssetDetail>(); 

     ordersDictionary = from orderItem in _orderBlock.Orders 
          join assetItem in tfEntity.AssetDetails on orderItem.Security.ID equals assetItem.sISIN 
          where orderItem.IdenitfierUsed == "I" 
          where assetItem.iSkeletal == 1 
          select new { orderItem, assetItem }; 
+0

될 것입니다 :

당신이해야 할 모든

ToDictionary()를 추가입니다) http://msdn.microsoft.com/en-us/library/bb5 49277 (v = .110) .aspx – Ric

답변

3

사용 ToDictionary

Dictionary<Order, AssetDetail> ordersDictionary = 
    (from orderItem in _orderBlock.Orders 
    join assetItem in tfEntity.AssetDetails on orderItem.Security.ID equals assetItem.sISIN 
    where orderItem.IdenitfierUsed == "I" 
    where assetItem.iSkeletal == 1 
    select new { orderItem, assetItem }) 
    .ToDictionary(x => x.orderItem, x => x.assetItem); 
1

당신이 할 수있는 사전에 결과를 켭니다 ToDictionary() 메서드를 사용합니다. 즉

Dictionary<Order, AssetDetail> ordersDictionary = new Dictionary<Order, AssetDetail>(); 

    ordersDictionary = (from orderItem in _orderBlock.Orders 
         join assetItem in tfEntity.AssetDetails on orderItem.Security.ID equals assetItem.sISIN 
         where orderItem.IdenitfierUsed == "I" 
         where assetItem.iSkeletal == 1 
         select new { orderItem, assetItem }).ToDictionary(key => //the key, value => the value); 
1

을 당신이하는 방법에 매개 변수로 VAR를 전달할 수 없습니다 알고있다.

N을 ot true - var은 (반드시) 익명 유형이 아닙니다. 단지 컴파일러가 유형을 결정하도록 허용합니다.

var tfID = (from orderItem in _orderBlock.Orders 
         join assetItem in tfEntity.AssetDetails on orderItem.Security.ID equals assetItem.sISIN 
         where orderItem.IdenitfierUsed == "I" 
         where assetItem.iSkeletal == 1 
         select new { orderItem, assetItem }) 
      .ToDictionary(i => orderItem, i => assetItem); 

tfID는 (ToDictionary에 대한 설명서를 한 번 봐 걸릴 Dictionary<Order, AssetDetail>

2
ordersDictionary = (from orderItem in _orderBlock.Orders 
        join assetItem in tfEntity.AssetDetails on orderItem.Security.ID 
        equals assetItem.sISIN 
         where orderItem.IdenitfierUsed == "I" 
         where assetItem.iSkeletal == 1 
         select new { orderItem, assetItem } 
        ).ToDictionary(x=>x.orderItem, x=>x.assetItem);