2012-04-23 71 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

相关问题