簡體   English   中英

是否可以將Int32轉換為String?

[英]is it possible to convert Int32 to String?

是否可以convert Int32string

我在這段代碼中遇到了困難,我試圖將Int32轉換為string

var listOrder = daa.OrderByDescending(i => i.Times).ToList().Convert.ToString().OrderByDescending(jtSorting);

i.TimesInt32 ,我必須傳遞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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM