我有这个linq语法
var jsonData = new
{
total = 1,
page = 1,
records = per.Count(),
rows =
from r in per
select new
{
id = r.id,
cell = new List<string>()
{
SqlFunctions.StringConvert((double) r.id),
r.nombre,
r.mail,
r.documento
}
}
};
问题是cell属性中每个列表的值都是随机的项目顺序。
示例结果:
item 1: id:" 1" string
nombre:"Medina Teto" string
mail: "soyelteto@hotmail.com" string
dni:"DNI 12312322" string
item 2:
dni:"DNI 12312872" string
mail:"elancho@hotmail.com" string
nombre: "Peuchele Ruben" string
id: " 2" string
item 3:
id: " 3" string
nombre: "la momia Blanca" string
mail: "soylamomiabuena@hotmail.com" string
dni: "DNI 45612322" string
第2项首先是dni,然后是邮件。其他项目首先是id,然后是名称
为什么会发生这种情况?
答案 0 :(得分:1)
不确定为什么会发生(虽然我认为List<T>
中项目的枚举顺序不能保证稳定),但可以通过使用命名值来解决:
cell = new
{
dni = SqlFunctions.StringConvert((double) r.id),
nombre = r.nombre,
mail = r.mail,
documento = r.documento
}
额外的好处:接收方更了解它正在处理什么。
编辑(在您发表评论后)
试试运气
cell = new SortedList<int,string>
{
{ 1, r.id.ToString() },
{ 2, r.nombre },
{ 3, r.mail },
{ 4, r.documento }
}
但是您必须首先转换为IEnumerable
,EF不支持包含多个元素的列表初始值设定项。
答案 1 :(得分:0)
解决方案:
var rows = per.AsEnumerable()
.Select(r => new
{
id = r.id,
cell = new[]
{
r.id.ToString(),
r.nombre,
r.mail,
r.documento
}
}).ToArray();
var jsonData = new
{
total = 1,
page = 1,
records = per.Count(),
rows
};