2012-04-23 147 views
0

我得到一個錯誤:我正在使用實體框架,wcf。WCF,Linq錯誤:不能將類型System.linq.iorderedQueryable <>隱式轉換爲System.Collection.Generic.List <>

Error:cannot implicitly convert type System.linq.iorderedQueryable<xDataModel.Info> to System.Collection.Generic.List<xServiceLibrary.Info> 

下面是我的代碼:


WCF服務:

namespace xServiceLibrary 
{ 
    public List<Info> GetScenario() 
      { 
       xEntities db = new xEntities(); 
       var query = from qinfo in db.Infoes 
           select qinfo; 

        //return query.Cast<Info>().ToList(); (not working) 
        //return query.toList(); (not working) 
        return query; 
     } 
} 

接口:

namespace xServiceLibrary 
{ 
    [OperationContract] 
      List<Info> GetScenario(); 
} 

類:

namespace xServiceLibrary 
{ 
     [DataContract] 
     public class Info 
     { 
      [DataMember] 
      public int Scenario_Id; 

      [DataMember] 
      public string Scenario_Name { get; set; } 

      [DataMember] 
      public string Company_Name { get; set; } 
     } 
} 

更新:(2) 我有兩個類庫文件。 一個是xDataModel命名空間,我在其中創建了xmodel.edmx文件。 其次是我在實現Wcf服務的xServiceLibrary命名空間。 我已將xDataModel.dll文件附加到我的xServiceLibrary中,以便我可以查詢我的EF模型。

我無法理解這個概念。任何幫助,將不勝感激。

+0

爲什麼有兩個不同的類「DataModel.Info」和「ServiceLibrary.Info」具有相同的定義但名稱空間不同? – mellamokb 2012-04-23 21:43:36

+0

'qinfo'是什麼類型?這聽起來像是你有一個類型不匹配,因爲'qinfo'實際上不是一個'Info'對象。 – Tejs 2012-04-23 21:43:56

回答

0

的問題是,你有兩個不同的類,都被稱爲Info,無論是在範圍在一次運行查詢:否則作爲一種變通方法,你可以通過複製相關屬性逐個項目DataModel.InfoServiceLibrary.Info 。這是一個非常非常糟糕的東西,特別是如果你認爲他們是同一班。

如果DataModel.InfoServiceLibrary.Info是同一類,那麼您需要弄清楚它們爲什麼同時在範圍內並解決該問題。

如果他們是不同的類,你需要明確你試圖返回哪一個。假設你的EF模型包括一組DataModel.Info的對象,你的選擇有:

  1. 返回List<DataModel.Info>,你可以通過調用query.ToList()
  2. 返回List<ServiceLibrary.Info>,您可以通過複製領域得到得到您的DataModel.Info對象:

    var query = from qinfo in db.Info 
         select new ServiceLibrary.Info 
         { 
          Scenario_Id = q.Scenario_Id, 
          Scenario_Name = q.Scenario_Name 
          Company_Name = q.Company_Name 
         }; 
    
  3. 返回別的東西,如您的自定義DTO的對象,類似#2,但只有你所需要的特定字段(例如,如果ServiceLibrary.Info是一個沉重的OBJ等你不想傳遞。

在一般情況下,雖然,你的問題是迴避的事實是中心編譯器解釋List<Info>List<ServiceLibrary.Info>,你可能不希望它。

+0

謝謝你,正如你所說的編譯器解釋不同。 – jero 2012-04-24 00:51:39

1

問題是您有兩種不同類型InfoDataModel.InfoServiceLibrary.Info - 因爲這些是不同的類型,您不能將其中一個轉換爲另一個類型。

如果沒有強有力的理由,那麼我會消除其中的一個。

var results = (from qinfo in db.Infoes 
       select new ServiceLibrary.Info() 
       { 
        Scenario_Id = qinfo.Scenario_Id, 
        //and so on 
       }).ToList(); 
+0

我已更新,我已經嘗試過,但同樣的強制性例外發生。 – jero 2012-04-23 21:51:31

+0

如果你投影到'xServiceLibrary.Info'(就像在你上一個問題編輯中那樣),這應該按預期工作。什麼是編譯器錯誤? – BrokenGlass 2012-04-23 21:59:58

相關問題