使用LINQ WCF Ado.net查找记录“与返回类型”不匹配
本文关键字:返回类型 与返回类型 不匹配 查找记录 LINQ WCF Ado net 使用 | 更新日期: 2023-09-27 18:07:33
我正在尝试使用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. "vehicle . stockitem ' to 'System.Collections.GenericList"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; }
}
当您创建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,这就是你给它的。
您在方法实现中返回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;
}
让我们看看方法:
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
。