Bootstrap表排序与LINQ

时间:2017-11-20 20:00:14

标签: c# twitter-bootstrap linq sorting datatables-1.10

我在MVC应用程序中的视图中有一个bootstrap datatable。我使用提供的排序功能通过名为CreatedOn的列对其进行排序并将其加载到屏幕上。

<div class="container">
<div class="no-more-tables">
    <table id="tblTemplate" class="table table-advance dataTable">
        <thead>
            <tr>
                <th style="display:none">
                    ID
                </th>
                <th style="width:14%">
                    Type
                </th>
                <th style="width:25.5%;">
                    Subject
                </th>                   
                <th style="width:15%;">
                    Created By
                </th>
                <th style="width:15%;">
                    Created on
                </th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.lstBoxes)
            {
                <tr>
                    <td class="text-left" style="display:none">@item.Id</td>
                    <td class="text-left">@item.Type</td>
                    <td class="text-left">@item.Subject</td>
                    <td class="text-left">@item.CreatedBy</td>
                    <td class="text-left">@item.CreatedOn</td>   
                </tr>
            }
        </tbody>
    </table>
</div>
</div>

加载时的排序功能脚本:

function initialSortCommon(tblName,colNo) {
$("#tblTemplate").dataTable(
    {
        "bDestroy": true
    }
    ).fnDestroy();
$(document).ready(function () {
    $("#tblTemplate").dataTable({
        "bDestroy": true,
        "aaSorting": [[4, 'desc']],
        "oLanguage":
        {
            "sSearch": "Search all columns:",
        },
    });
});
}

问题是当使用SQL语句和使用Linq

提供列表时,排序的行为会有所不同
 var lstBoxes = new List<Record>();
 var con = new SqlConnection(cs);
 con.Open();
 var command = new SqlCommand("SELECT ID,Type,Subject,CreatedBy,CreatedOn FROM Box", con);
 SqlDataReader reader = command.ExecuteReader();
 while (reader.Read())
 {
      lstBoxes.Add(new Record { Type = Convert.ToString(reader["Type"]), Id = Convert.ToString(reader["ID"]), Subject = Convert.ToString(reader["Subject"]), CreatedBy = Convert.ToString(reader["CreatedBy"]), CreatedOn = Convert.ToString(reader["CreatedOn"]) });
 }
 con.Close();
 return lstBoxes;

使用Linq:

var lstBoxes = db.Boxs.Select(s => new Record
 { Type = s.Type, Id = s.ID.ToString(), Subject = s.Subject, CreatedBy = s.CreatedBy, CreatedOn = s.CreatedOn.ToString() }).ToList();
return lstEvents;

即使两个表都返回相同的数据,Created on上的排序也可以与SQL Server完美配合,但不能与LINQ配合使用。这是一个已知的问题吗?

编辑:删除LINQ中的降序以使两个代码保持一致。

编辑2:我检查了两个列表的结果。检索日期的方式有所不同。 例如:在SQL中,字段Convert.ToString(reader [“CreatedOn”])正在检索为11/7/2017 9:51:26 AM,其中LINQ CreatedOn = s.CreatedOn.ToString()给出11月7日2017年9:51 AM。这可能是问题的原因。 LINQ字符串的格式是否与SQL结果字符串类似?

0 个答案:

没有答案