我在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结果字符串类似?