[英]is it possible to convert Int32 to String?
是否可以convert Int32
為string
?
我在這段代碼中遇到了困難,我試圖將Int32
轉換為string
。
var listOrder = daa.OrderByDescending(i => i.Times).ToList().Convert.ToString().OrderByDescending(jtSorting);
i.Times
是Int32
,我必須傳遞jSorting
參數,它是字符串。
編譯時出現此錯誤:
“不包含對'Convert'的定義,也沒有擴展方法'Convert'接受類型的第一個參數”
完整的控制器代碼供您檢查:
public JsonResult TopPlayedInVenueList1(string name = "", string ArtistName = "", int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
{
try
{
if (Request.IsAuthenticated == true)
{
string Path = @"C:\\5Newwithdate-records.xls";
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '" +
Path + "';Extended Properties=" + (char)34 +
"Excel 8.0;IMEX=1;" + (char)34 + "");
OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", con);
System.Data.DataTable data = new System.Data.DataTable();
da.Fill(data);
con.Close();
List<TopPlayed> daa = new List<TopPlayed>();
foreach (DataRow p in data.Rows)
{
TopPlayed top = new TopPlayed()
{
TrackID = Convert.ToInt32(p.Field<double>("TrackID")),
TrackName = p.Field<string>("TrackName"),
ArtistName = p.Field<string>("ArtistName"),
Times = Convert.ToInt32(p.Field<double>("Times"))
};
daa.Add(top);
}
///// var newlist = daa.OrderByDescending(i => i.Times).ToList().GetRange(jtStartIndex, jtPageSize);
var newlist = daa.AsQueryable().OrderByDescending(jtSorting).OrderByDescending(i => i.Times).ToList();
return Json(new { Result = "OK", Records = newlist, TotalRecordCount = daa.Count });
查看jTable數據表的代碼:
$(document).ready(function () {
$('#TopPlayedInVenueContainer1').jtable({
title: 'NSM Biling Report List',
paging: true,
pageSize: 100,
sorting: true,
// defaultSorting: 'Times ASC',
actions: {
listAction: '@Url.Action("TopPlayedInVenueList1")'
},
fields: {
TrackID: {
title: 'Track ID',
key: true,
create: false,
edit: false,
resize: false,
tooltip: 'Track Name'
},
TrackName: {
title: 'Track Name',
key: true,
create: false,
edit: false,
resize: false,
tooltip: 'Track Name'
},
ArtistName: {
title: 'Artist Name',
key: true,
create: false,
edit: false,
resize: false,
tooltip: 'Track Name'
},
Times: {
title: 'Times',
tooltip: 'Artist Name'
}
}
});
$('#LoadRecordsButton').click(function (e) {
e.preventDefault();
$('#TopPlayedInVenueContainer1').jtable('load', {
name: $('#name').val(),
ArtistName: $('#ArtistName').val()
});
});
//Load all records when page is first shown
$('#LoadRecordsButton').click();
});
OrderByExtensions
namespace NSM.BackOffice.Controllers
{
public static class OrderByExtensions
{
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering)
{
var type = typeof(T);
var property = type.GetProperty(ordering);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
return source.Provider.CreateQuery<T>(resultExp);
}
public static IQueryable<T> OrderByDescending<T>(this IQueryable<T> source, string ordering)
{
var type = typeof(T);
var property = type.GetProperty(ordering);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
return source.Provider.CreateQuery<T>(resultExp);
}
}
}
我對C#感到很新鮮,因此,如果可以的話,請讓我知道一種鍛煉方法,以使其正常工作。 提前致謝。
您可以在Enumerable.Select的投影過程中調用ToString
。
var listOrder = daa.OrderByDescending(i => i.Times).Select(c=>c.Times.ToString()).ToList();
這部分:
OrderByDescending(i => i.Times).ToList().Convert.ToString()
看起來很奇怪。 這里Convert
不是屬性,也不是方法調用。 您可能需要這樣做:
OrderByDescending(i => i.Times).ToList().Select(x => x.ToString())
更新。 在評論中進行后續討論-這是如何使用此處實現的擴展方法。 在項目的某處聲明一個靜態類,如下所示:
public static class OrderByExtensions
{
public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering) {
var type = typeof(T);
var property = type.GetProperty(ordering);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
return source.Provider.CreateQuery<T>(resultExp);
}
public static IQueryable<T> OrderByDescending<T>(this IQueryable<T> source, string ordering) {
var type = typeof(T);
var property = type.GetProperty(ordering);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
return source.Provider.CreateQuery<T>(resultExp);
}
}
確保這個類是可見里面TopPlayedInVenueList1
,如果沒有-使用using
做如此。 之后,您應該可以使用任何IQueryable<>
:
.OrderByDescending(jtSorting);
您的jsSorting參數用於排序數據表,而不是IEnumerables:嘗試以下操作:
data.DefaultView.Sort = jsSorting;
您正在嘗試將列表對象轉換為字符串:
var listOrder = daa.OrderByDescending(i => i.Times).ToList().Convert.ToString();
您可能想要什么(我不知道您的要求是):
var listOrder = daa.OrderByDescending(i => i.Times).Select(i => i.Times.ToString()).ToList();
這會給你一個字符串列表。
根據您的評論,如果所提到的技術超出您的范圍,則可以執行此操作(如果要排序的列數有限,這可能很好):
List<TopPlayed> sorted;
switch (jtSorting)
{
case "Times":
sorted = daa.OrderByDescending(i => i.Times).ToList();
break;
case "Other":
sorted = daa.OrderByDescending(i => i.Other).ToList();
break;
default:
//Oops. Do something appropriate here.
}
// etc.
C#中的幾乎所有內容都從object
繼承,該object
具有ToString()
方法。 並非所有的東西都提供了特別有用的實現(某些東西只是打印其類型名稱,特別是集合),而Int32
卻提供了。 因此, i.Times.ToString()
將為您提供字符串版本。
如果您使用Linq
daa.OrderByDescending(i => i.Times.ToString())
daa.OrderByDescending(i => (string)i.Times)
如果您在EF上使用Linq
daa.OrderByDescending(i => SqlFunctions.StringFormat((double?)i.Times))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.