我收到错误:我正在使用实体框架,wcf。
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文件。 第二个是xServiceLibrary命名空间,我正在实现Wcf服务。 我已将xDataModel.dll文件附加到我的xServiceLibrary中,以便我可以查询我的EF模型。
我无法理解这个概念。任何帮助,将不胜感激。
答案 0 :(得分:1)
问题在于您有两种名为Info
的不同类型:DataModel.Info
和ServiceLibrary.Info
- 因为这些是不同的类型,您无法将其转换为另一种类型。
如果两者都没有充分理由我会消除其中一个。否则,作为一种变通方法,您可以通过逐个复制相关属性来将DataModel.Info
投影到ServiceLibrary.Info
:
var results = (from qinfo in db.Infoes
select new ServiceLibrary.Info()
{
Scenario_Id = qinfo.Scenario_Id,
//and so on
}).ToList();
答案 1 :(得分:0)
问题是你有两个不同的类,都叫做Info
,在你运行查询时都在范围内。这是非常非常糟糕的事情,特别是如果你认为他们是同一个班级的话。
如果DataModel.Info
和ServiceLibrary.Info
是同一个类,则需要找出它们同时在范围内的原因并修复它。
如果它们是不同的类,您需要明确指出您要返回的是哪一个。假设您的EF模型包含一组DataModel.Info
个对象,您可以选择:
List<DataModel.Info>
query.ToList()
通过复制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
};
返回其他内容,例如您的自定义DTO对象,类似于#2但只包含您需要的特定字段(例如,如果ServiceLibrary.Info
是一个您不想传递的重物。
一般而言,您的问题集中在编译器将List<Info>
解释为List<ServiceLibrary.Info>
并且您可能不希望它的事实。