0

私はこの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
                                  }
                           }
            };

問題は、セル プロパティの各リストの値の項目の順序がランダムであることです。

結果の例:

        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 があり、次に mail があります。他のアイテムには最初にIDがあり、次に名前があります

なぜこれが起こったのですか?

4

2 に答える 2

1

なぜそれが起こるのかはわかりませんが (a の項目の列挙順序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 }
}

ただし、最初に変換する必要があります。EF はIEnumerable、複数の要素を持つリスト初期化子をサポートしていません。

于 2012-08-22T20:46:37.700 に答える
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
            };
于 2012-08-24T11:17:12.140 に答える