我想要做的是,在项目对象中返回项目列表,然后将其发送给json,但我不知道我做错了什么:
public ActionResult editarComanda(int idcomanda)
{
List<Items> objectes = new List<Items>();
var db = new daw_tenda();
var llistaobjectes = db.Llistes.Where(x => x.comandes_id == idcomanda).ToList();
foreach (var item in llistaobjectes)
{
**objectes.Add(db.Items.Where(x => x.Id == item.items_id).ToList());**
}
return Json(objectes, JsonRequestBehavior.AllowGet);
}
如何添加来反对该linq查询的结果?
这是我的Ajax脚本:
$(".editar").click(function () { //BUTO editar comanda
var itemid = $(this).attr('id');
$("#contingutllistes").empty();
$.ajax({
url: "/Perfil/editarComanda",
dataType: 'json',
type: 'POST',
data: {
idcomanda: itemid,
},
success: function (response) {
console.log(response);
if (response) {
for (var i = 0; i < response.length; i++) {
???
}
$("#contingutllistes").show();
}
}
});
});
答案 0 :(得分:0)
尝试使用AddRange
上的方法objectes
,如下所示:
foreach (var item in llistaobjectes)
{
objectes.AddRange(db.Items.Where(x => x.Id == item.items_id).ToList());
}
您也可以使用objectes.Add(db.Items.Where(x => x.Id == item.items_id).FirstOrDefault())
,但我不确定您的数据库结构是什么,因此可能无效。
序列化实体框架对象
您无法直接序列化实体框架对象,因为导航属性将导致循环引用。您有两种选择:
使用Select(x => new { ... })
创建一个您将返回的匿名对象,而不是返回Item
个对象。
创建一个除了保存您要为Item
发送的值之外什么都不做的类。这被称为DTO模式,IMO是更好的选择。
选项1可以帮助您,但选项2将更易于维护。
以下是选项1的示例,以便您可以开始使用:
foreach (var item in llistaobjectes)
{
objectes.AddRange(db.Items.Where(x => x.Id == item.items_id).Select(x => new
{
Id = x.Id,
SKU = x.SKU, //No idea what your table looks like
AnotherProperty = x.AnotherProperty, //again, no idea...
}).ToList());
}
<强>性能强>
但我现在要告诉你,表现不会好。你应该做的是用以下的方法替换你的方法:
public ActionResult editarComanda(int idcomanda)
{
var db = new daw_tenda();
var llistaIds = db.Llistes.Where(x => x.comandes_id == idcomanda)
.Select(x => x.items_id)
.ToList();
var objectes = db.Items.Where(x => llistaIds.Contains(x.Id)).ToList();
return Json(objectes, JsonRequestBehavior.AllowGet);
}
这恰好执行两个数据库查询。您之前的那个将为每个id执行数据库查询。这个新的首先加载id然后加载你的项目。第二个查询实际上创建了一个WHERE IN
SQL查询(在Contains
中Where
将在大多数情况下创建 <!-- ============ HEADER SECTION ============== -->
<td colspan="2" style="height: 100px;" bgcolor="#777d6a">
<h1>Add a New Subdiv file <a href="/main" class="HomeButton">
<img src="../../../../Pictures/dwelling1.png" height="50"/></a>
<a href="/logout" class="LogoutButton"> Logout </a></h1></td></tr>
时,包含列表是字符串或整数或其他内容的列表)对于中等大小的名单,这应该表现得相当好。
<强>除了强>
这不是我的答案的一部分,但您是否尝试过Web API查看MVC4 / 5?我曾经使用MVC来做JSON,但它使用时间戳之类的东西并且总体上难以使用。 Web API可能更适合您尝试的操作。