当前位置: 首页 > 知识库问答 >
问题:

使用LINQ WCF Ado。net“不匹配返回类型”

罗翰
2023-03-14

我正在尝试使用ID搜索记录。我有成功返回所有记录的代码,但是我不确定如何只返回一个匹配的记录。

我用的是C#,linq,WCF

public List<Vehicle> SearchVehicleRecord(int vehicleID)
        {

            VehicleStockItem vehicle =
                (from v in db.VehicleStockItems
                 where v.VehicleStockItemID == vehicleID
                 select v
                 ).First();
            return vehicle;
        }

我收到的错误是“错误1”车辆销售服务。“Service1”不实现接口成员“VehicleSalesService”。iservice 1 . search vehicle record(int)'。车辆销售服务。service 1 . search vehicle record(int)“无法实现”VehicleSalesService。iservice 1 . search vehicle record(int)”,因为它没有匹配的返回类型“System。' Collections.Generic.List '。c:\ Users \ Dale \ Documents \ Visual Studio 2012 \ Projects \ vehiclesaleservice \ vehiclesaleservice \ service 1 . cs 12 18 vehiclesaleservice "

"错误2无法将类型'车辆销售服务.模型.车辆库存项目'隐式转换为'系统.收藏.通用.列表'C:\用户\戴尔\文档\Visual Studio 2012\项目\车辆销售服务\车辆销售服务\Service1.cs64 20车辆销售服务"

这是操作

    [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; }
    }

共有3个答案

蒯胜泫
2023-03-14
匿名用户

让我们看看方法:

public List<Vehicle> SearchVehicleRecord(int vehicleID)
        {

            VehicleStockItem vehicle =
                (from v in db.VehicleStockItems
                 where v.VehicleStockItemID == vehicleID
                 select v
                 ).First();
            return vehicle;
        }

存在哪些问题:

  • 具有返回类型,但返回不同类型的东西
  • 返回车辆库存项目,但期望列表作为返回

也许你应该修改你的方法,像这样:

public VehicleStockItem SearchVehicleRecord(int vehicleID)
        {

            VehicleStockItem vehicle =
                (from v in db.VehicleStockItems
                 where v.VehicleStockItemID == vehicleID
                 select v
                 ).First();
            return vehicle;
        }

如果您这样做,请确保您使用操作合同遵循它,并且在您定义操作合同的地方定义了车辆库存项目

您可以修改您的方法以返回包含您想要的单个元素的列表。

或者,您可以将vehicle转换为vehicle,并修改 以获得 /code>结果,而不是 元素的列表List。

殳凯捷
2023-03-14

您将在方法实现中返回< code>VehicleStockItem的单个实例。

您的方法签名表明您正在返回List

您可以重载您的方法,以便您有一个在传入 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;
    }

段干飞翮
2023-03-14

当您创建方法搜索车辆记录(int车辆ID)时,您已经声明它将返回车辆列表。

但是,在linq查询中,当您调用。首先()您挑选出一辆车,并将其html" target="_blank">存储在您的VehicleStockItem vehicle中。然后,当该方法需要您返回一个车辆列表时,您返回单个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,这就是您给它的。

 类似资料:
  • 可以使用泛型将返回类型与参数类型匹配吗? 实例案例: 我有一个抽象类,可以从不同的POJO导入数据,这个类包含一个abstract方法importData。 importData返回的对象必须与传递给该方法的对象类型相同。 由于抽象方法的每个实现的对象类型不同,并且类型不扩展另一个,如何定义抽象方法,以便实现返回类型和传递类型必须匹配? 经过考验: 结果: 方法的返回类型不必与传递的对象类型匹配。

  • 问题内容: 我正在用于在运行时更新json配置文件。有时,当模式在json文件中不匹配时,仍然会以返回码0退出。 返回0表示成功完成,但是如果找不到正确的模式并更新文件,为什么返回0?有没有解决方法? 谢谢! 问题答案: 如@cnicutar所评论,命令的返回码表示命令是否成功执行。与您在代码/脚本中实现的逻辑无关。 因此,如果您有: sed将返回,但是如果您编写一些语法/表达式错误,或者输入/文

  • 问题内容: 我正在玩Go,发现一个我无法解决的问题。假设我有如下代码: 我导入了软件包并开始使用它: 我真的很喜欢我的助手“运行”,但是我想使其更加慷慨:我不希望人们总是向我传递MySQL客户端。可以是具有“ RunQuery”和“ Result”方法的任何东西。所以我尝试使用接口: 可悲的是,这不再编译了。我收到此错误: Go不支持此功能吗,或者我做错了什么? 问题答案: 应该返回接口,否则你总

  • 问题内容: 我正在使用Elasticsearch的php库对我的网站进行索引和查找文档。这是用于创建索引的代码: 然后,我使用curl XPUT将文档添加到索引,并使用XGET查询索引。除了返回结果时跨索引的单数和复数查询词不匹配之外,这种方法效果很好。例如,当我搜索“讨论”时,不返回“讨论”的匹配项,反之亦然。为什么会这样呢?我认为这是默认情况下在Elasticsearch中处理的。为了匹配单数

  • 有四种不同的类型:地点、语言、技术和行业。每个类型都有一个存储库,可以返回这些类型的集合。例如位置列表。每个类型都有一个类型为String的name属性。有一个字符串列表。它可以包含位置、语言等名称。我想编写一个函数来查找那些与字符串列表名称匹配的类型实体(位置、语言、...)。我在想这样的事情: 这是不正确的,那么如何对集合进行查询,然后如何确定name属性是否存在呢?