繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM