[英]Finding record using LINQ WCF Ado.net “Does not match return type”
我正在尝试使用ID搜索记录。 我有成功返回所有记录的代码,但是我不确定如何仅返回一个匹配的记录。
我正在使用C#,linq,WCF和ADO.net数据服务。 如果这是骗子,我深表歉意,有人可以解释一下我要去哪里错了。 我对这种语言没有经验。
public List<Vehicle> SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).First();
return vehicle;
}
我收到的错误是“错误1'VehicleSalesService.Service1'未实现接口成员'VehicleSalesService.IService1.SearchVehicleRecord(int)'。'VehicleSalesService.Service1.SearchVehicleRecord(int)'无法实现'VehicleSalesService.IService1.SearchVehicleRecord(int) ',因为它没有匹配的返回类型'System.Collections.Generic.List'。C:\\ Users \\ Dale \\ Documents \\ Visual Studio 2012 \\ Projects \\ VehicleSalesService \\ VehicleSalesService \\ Service1.cs 12 18 VehicleSalesService”
“错误2无法将类型'VehicleSalesService.Models.VehicleStockItem'隐式转换为'System.Collections.Generic.List'C:\\ Users \\ Dale \\ Documents \\ Visual Studio 2012 \\ Projects \\ VehicleSalesService \\ VehicleSalesService \\ Service1.cs 64 20 VehicleSalesService”
这是操作
[OperationContract]
List<Vehicle> SearchVehicleRecord(int vehicleID);
这是VehicleStockItem的定义
public partial class VehicleStockItem
{
public int VehicleStockItemID { get; set; }
public int ColourID { get; set; }
public int VehicleTypeID { get; set; }
public int WheelTypeID { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public string Registration { get; set; }
public decimal Price { get; set; }
public int Capacity { get; set; }
public bool Automatic { get; set; }
public bool Sold { get; set; }
public System.DateTime StockEntryDate { get; set; }
public System.DateTime DateNew { get; set; }
public string Notes { get; set; }
public virtual Colour Colour { get; set; }
public virtual VehicleType VehicleType { get; set; }
public virtual WheelType WheelType { get; set; }
}
您将在方法实现中返回VehicleStockItem
的单个实例。
您的方法签名表明您正在返回List<Vehicle>
集合。
您可以重载您的方法,这样您就可以实现一个实现,该实现在传递ID时返回一条记录,而一个方法根据传入的任何参数返回集合。
根据您是要添加还是替换现有方法,来添加或更新合同
[OperationContract]
VehicleStockItem SearchVehicleRecord(int vehicleID);
然后,您将更新您的签名以匹配您的合同:
public VehicleStockItem SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).First();
return vehicle;
}
创建方法SearchVehicleRecord(int vehicleID)时,您已声明它将返回车辆清单。
但是,在您的linq查询中,当您调用.First()时,您正在挑选一个单车并将其存储在VehicleStockItem车中。 然后,当方法需要您返回的是车辆清单时,您将返回单个VehicleStockItem对象。
因此,确实存在两个问题:您定义了一种返回车辆列表的方法,但是实际上既不返回列表也不返回车辆,而是返回一个VehicleStockItem。 (它表示返回车辆,但这只是您创建的VehicleStockItem类型对象的特定名称。)
尝试将您的方法签名更改为
public VehicleStockItem SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).First();
return vehicle;
}
这期望返回单个VehicleStockItem,这就是您所提供的。
让我们看看方法:
public List<Vehicle> SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).First();
return vehicle;
}
有什么问题:
VehicleStockItem
,但期望将List
作为回报 也许您应该修改方法,如下所示:
public VehicleStockItem SearchVehicleRecord(int vehicleID)
{
VehicleStockItem vehicle =
(from v in db.VehicleStockItems
where v.VehicleStockItemID == vehicleID
select v
).First();
return vehicle;
}
如果执行此操作,请确保将其与OperationContract
并在其中定义OperationContract
位置定义了VehicleStockItem
。
您可以修改方法以返回包含所需单个元素的列表。
或者,您可以将vehicle
转换为Vehicle
并修改OperationContract
以期望Vehicle
结果而不是Vehicle
元素List
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.