Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从ASP.NET中的web服务返回条件列表?_C#_Asp.net - Fatal编程技术网

C# 如何从ASP.NET中的web服务返回条件列表?

C# 如何从ASP.NET中的web服务返回条件列表?,c#,asp.net,C#,Asp.net,我想通过一个web服务返回一个列表,该服务使用一个字符串更新提供该列表的SQL。我不太熟悉建筑清单,但我班上已经有了清单。同样,我想通过web服务返回此列表 我的表类中的当前列表: static public List<Skills> GetSkillsList(string like) { List<Skills> thelist = new List<Skills>(); string sql = "SELECT * FROM Skill

我想通过一个web服务返回一个列表,该服务使用一个字符串更新提供该列表的SQL。我不太熟悉建筑清单,但我班上已经有了清单。同样,我想通过web服务返回此列表

我的表类中的当前列表:

static public List<Skills> GetSkillsList(string like)
{
    List<Skills> thelist = new List<Skills>();

    string sql = "SELECT * FROM Skills WHERE SkillName LIKE '%" + like + "%'";

    SqlDataReader dr = DBUtil.FillDataReader(sql);

    while (dr.Read())
    {
        Skills obj = new Skills();

        obj.skillID = Convert.ToInt32(dr["skillID"].ToString());
        obj.skillName = Convert.ToString(dr["skillName"].ToString());
        obj.skillReviewed = Convert.ToBoolean(dr["skillReviewed"].ToString());
        obj.skillActive = Convert.ToBoolean(dr["skillActive"].ToString());

        thelist.Add(obj);
    }
    return thelist;
}
静态公共列表GetSkillsList(类似字符串)
{
列表列表=新列表();
string sql=“从技能中选择*,其中技能名称类似“%”+类似+“%””;
SqlDataReader dr=DBUtil.FillDataReader(sql);
while(dr.Read())
{
技能obj=新技能();
obj.skillID=Convert.ToInt32(dr[“skillID”].ToString());
obj.skillName=Convert.ToString(dr[“skillName”].ToString());
obj.skillrevieved=Convert.ToBoolean(dr[“skillrevieved”].ToString());
obj.skillActive=Convert.ToBoolean(dr[“skillActive”].ToString());
添加列表(obj);
}
返回列表;
}
web服务中的虚拟列表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.Web.Script.Services.ScriptService]
public class AutoComplete : System.Web.Services.WebService 
{
   [WebMethod]
   public IList<string> GetSkills(string contains)
   {

       IList<string> output = new List<string>();
       output.Add("Apple");
       output.Add("Ajax");
       output.Add("Alpha");
       output.Add("Alphred");
       return output;    
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Services;
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
公共类自动完成:System.Web.Services.WebService
{
[网络方法]
公共IList GetSkills(字符串包含)
{
IList输出=新列表();
输出。添加(“苹果”);
Add(“Ajax”);
输出。添加(“α”);
输出。添加(“Alphred”);
返回输出;
}
}
我想返回web服务列表中的名称和ID字段

我想应该是这样的:

[WebMethod]
public IList<string> SkillsList(string like)
{
    IList<string> output = new List<string>();

    output = Skills.GetSkillsList(like);

    return output;
}
[WebMethod]
公共IList技能列表(类似字符串)
{
IList输出=新列表();
输出=Skills.GetSkillsList(like);
返回输出;
}
但我知道这是不正确的


感谢您的帮助

我会创建另一个只有ID和Name属性的类,填充该类的列表并将其返回给调用方。我已经创建了一个示例控制台应用程序。请参阅下面的代码,并让我知道它是否有帮助

public class Test {
        public int A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }

    public class TestR {
        public int A { get; set; }
        public string B { get; set; }
    }

    class Program
    {

        static void Main(string[] args)
        {
            List<Test> list = new List<Test>();
            list.Add(new Test { A=1, B="AAAAA", C="BBBBB"});
            list.Add(new Test { A = 2, B = "BBBBB", C = "CCCCC" });
            list.Add(new Test { A = 3, B = "CCCCC", C = "DDDDD" });

            List<TestR> r = new List<TestR>();
            list.ForEach(l=> r.Add(new TestR { A= l.A, B=l.B }));
            Console.ReadLine();
        }
    }
公共类测试{
公共int A{get;set;}
公共字符串B{get;set;}
公共字符串C{get;set;}
}
公共类TestR{
公共int A{get;set;}
公共字符串B{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
列表=新列表();
添加(新测试{A=1,B=“AAAAA”,C=“BBBBB”});
添加(新测试{A=2,B=“BBBBB”,C=“CCCCC”});
添加(新测试{A=3,B=“CCCCC”,C=“DDD”});
列表r=新列表();
ForEach(l=>r.Add(newtestr{A=l.A,B=l.B}));
Console.ReadLine();
}
}

以下是如何在您提供的WebMethod中执行此操作。正如所建议的,最好使用一个新类来保存ID和名称。尽管如果需要使用列表,可以使用分隔字符串

public class Pair
{
     public string ID { get; set; }
     public string Name { get; set; }
}

[WebMethod]
public IList<Pair> SkillsList(string like)
{
    IList<Skills> mySkills = new List<Skills>();
    IList<Pair> output = new List<Pair>();
    mySkills = Skills.GetSkillsList(like);

    foreach(Skills currentSkill in mySkills)
    {
        Pair p = new Pair();
        p.ID = currentSkill.ID;
        p.Name = currentSkill.Name;

        output.Add(p);
    }

    return output;
}
公共类对
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
}
[网络方法]
公共IList技能列表(类似字符串)
{
IList mySkills=新列表();
IList输出=新列表();
mySkills=Skills.GetSkillsList(like);
foreach(技能当前mySkills中的技能)
{
对p=新对();
p、 ID=currentSkill.ID;
p、 Name=currentSkill.Name;
增加(p);
}
返回输出;
}