C# 使用LINQ和WebMethod按ID选择数据库中的列

C# 使用LINQ和WebMethod按ID选择数据库中的列,c#,asp.net,ajax,json,linq,C#,Asp.net,Ajax,Json,Linq,我试图在jQueryUI模式上填充一个webform,这时有人用AJAX调用getProjectByID()方法并在该模式上填充来自数据库的数据单击编辑按钮。我想我很接近了,但肯定错过了一些东西。我基本上想用projectd从单击的行中获取10个左右的列,用JSON返回它们,然后解析JSON,并用表中的列填充模式中相应的文本框 AJAX调用: var id = $(this).attr('value'); //this is the id of the clicked row $.aj

我试图在jQueryUI模式上填充一个webform,这时有人用AJAX调用getProjectByID()方法并在该模式上填充来自数据库的数据单击编辑按钮。我想我很接近了,但肯定错过了一些东西。我基本上想用projectd从单击的行中获取10个左右的列,用JSON返回它们,然后解析JSON,并用表中的列填充模式中相应的文本框

AJAX调用:

var id = $(this).attr('value'); //this is the id of the clicked row

    $.ajax({
        url: "view-requests.aspx/getProjectByID",   // Current Page, Method
        data: JSON.stringify({ id: id }), // parameter map as JSON
        type: "POST", // data has to be POSTed
        contentType: "application/json", // posting JSON content    
        dataType: "JSON",  // type of data is JSON (must be upper case!)
        timeout: 10000,    // AJAX timeout
        success: function (result) {
            //alert(result);
            $("#txtContactFirstEdit").val(result);
        },
        error: function (xhr, status) {
            alert(status + " - " + xhr.responseText);
        }
    });
WebMethod:

[WebMethod]
    public static string getProjectByID(int id)
    {
        using (dbPSREntities4 myEntities = new dbPSREntities4())
        {
            var thisProject = from tbProject in myEntities.tbProjects.Where(x => x.tbProject == id) // this is not correct but close?
                              select tbProject;
            return thisProject.ToList(); //no idea how to return it...
        }
    }
在AJAX中,我想填充文本框,但现在不知道如何解析JSON以获取值


在此方面的任何帮助都将不胜感激,谢谢

首先,LINQ可以正常工作,但您可以简单地删除不必要的部分。其次,您需要使用一些序列化程序,例如System.Web中已经提供的序列化程序,并将数据转换为JSON:

[WebMethod]
public static string getProjectByID(int id)
{
    var thisProject = myEntities.tbProjects.Where(x => x.tbProject == id).ToList();

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(thisProject);

    return json;
}
实际上,如果您的LINQ查询只返回一个对象,而不是一个集合,那么您可以更简单地执行JSON:

var thisProject = myEntities.tbProjects.Where(x => x.tbProject == id).Single(); // or SingleOrDefault - depends on your situation
...
var json = serializer.Serialize(thisProject);

这将为您提供只描述项目对象的JSON,而不需要数组开销。

我是一个很好的开端,您可以在这里找到:

正如我所看到的,您试图将对象列表返回给客户端,但您的WebMethod设置为返回字符串,对吗?那么为什么不序列化它呢

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(thisProject);

return json;

对我来说,正确的方法是将整个对象列表作为数组返回给客户端

它在(x=>x.tbProject==id)处给我一个红色下划线,表示委托系统.Func不接受1个参数。知道为什么会发生这种情况吗?@user1431633,看起来实际上应该有类似
tbProjects.Where(x=>x.id==id)的东西
,因为
x
已经是项目的一个实例。