使用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; }
    }

使用LINQ WCF Ado.net查找记录“与返回类型”不匹配

当您创建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