并非所有代码路径 return 一个值 WCF 服务

Not all code paths return a value WCF Service

您好,我正忙着将我的 SQL 数据库连接到我的 WCF RESTful 服务。 这是我的问题: WebService.Service1.GetAllTrucks(string)': not all code paths return a value。每个报价单都有一辆卡车或多辆卡车与外键相连,我希望能够在每个报价单中查看每辆卡车(我试图在方法中这样做:'GetAllTrucks') .

IService1.cs

        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "getTrucks")]
        List<wsTrucks> GetTrucks();

        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "getAllTrucks/{truckID}")]
        List<wsQuote> GetAllTrucks(string truckID);

Service1.svc.cs

  public List<wsTrucks> GetTrucks()
        {
            NorthwindDataContext dc = new NorthwindDataContext();
            List<wsTrucks> results = new List<wsTrucks>();

            foreach (tblTruck truck in dc.tblTrucks)
            {
                results.Add(new wsTrucks()
                    {
                        TruckID = truck.ID,
                        TrucksName = truck.TRUCKNAME
                    });
            }
            return results;
        }

        public List<wsQuote> GetAllTrucks(string truckID)
        {
            NorthwindDataContext dc = new NorthwindDataContext();
            List<wsQuote> results = new List<wsQuote>();
            System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("en-US");

            foreach (tblQuote quote in dc.tblQuotes.Where(s => s.ID.ToString() == truckID))
            {
                results.Add(new wsQuote()
                    {
                        QuoteID = quote.ID,
                        QuoteNumber = quote.QUOTENUMBER
                    });
                return results;
            }
        }

引用

[DataContract]
    public class wsQuote
    {
        [DataMember]
        public int QuoteID { get; set; }

        [DataMember]
        public string QuoteNumber { get; set; }
    }

卡车

[DataContract]
    public class wsTrucks
    {
        [DataMember]
        public int TruckID { get; set; }

        [DataMember]
        public string TrucksName { get; set; }
    }

谢谢。

您应该能够通过将 GetAllTrucks(string truckID) 方法中的 return results 移动到循环之后来解决此问题:

    public List<wsQuote> GetAllTrucks(string truckID)
    {
        NorthwindDataContext dc = new NorthwindDataContext();
        List<wsQuote> results = new List<wsQuote>();
        System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("en-US");

        foreach (tblQuote quote in dc.tblQuotes.Where(s => s.ID.ToString() == truckID))
        {
            results.Add(new wsQuote()
                {
                    QuoteID = quote.ID,
                    QuoteNumber = quote.QUOTENUMBER
                });
            // return results; <----- HERE! Move this to after the loop
        }

        return results; // Move it here.
    }

问题是如果列表为空,foreach循环体将被跳过,循环后没有return语句执行。