在linq中选择new c#

时间:2012-04-11 01:47:34

标签: asp.net-mvc linq

我在asp.net mvc项目的控制器中有一个动作。

public JsonResult GetProductBySearch(string Q)
{
   JsonResult jr = new JsonResult();
   var _product = from a in DataContext.SearchItem(Q)
                  select new { ID = a.ID, ProName = a.Name };
   jr.Data = _product.ToList();
   jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
   return jr;
}

我想将此json数据返回到我的项目视图。如果我使用“select new”,它在我的视图中运行良好,但据我所知,当我们需要子数据集时,选择new正在使用。但是在这个查询中,我想从我的表中获取所有字段,如下所示:

public JsonResult GetProductBySearch(string Q)
{
  JsonResult jr = new JsonResult();
  var _product = from a in DataContext.SearchItem(Q)
                 select a;
  jr.Data = _product.ToList();
  jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
  return jr;
}

这是我循环播放的内容,如果我使用select new,它的效果非常好。 但是当我改为SELECT时,警报不起作用。

 $.getJSON(url, data, function (data) {
     alert(1);
   $.each(data, function (index, proValByDep) {

   });
 });

请任何想法。

2 个答案:

答案 0 :(得分:1)

为什么使用“来自DataContext.SearchItem(Q)中的a选择”?

你不能使用jr.Data=DataContext.SearchItem(Q).ToList()

答案 1 :(得分:1)

我只是猜测问题,因为问题有点不清楚。

在第一个例子中,我们看到:

select new { ID = a.ID, ProName = a.Name };

在第二个字段中,字段名称将不相同,因此生成的json将ProName而不是Name

也许javascript期待ProName并错误输出,因为它未定义。

这并不能解释为什么alert(1);不起作用。