C#将linq list(int)item更改为(string)

时间:2014-01-06 16:23:44

标签: c# .net linq list loops

我的任务是修复其他人制作的C#应用​​程序中的一些问题(有人离开了公司),我不是一个合格的C#程序员,这只是一个爱好,所以我对以下内容感到困惑。

var JobQuery = (from datavalue in dc.JobInformations
    where datavalue.JobOpen != 20
    select new
    {
    datavalue.JobID,
    datavalue.CompanyName,
    datavalue.Contact,
    datavalue.Date,
    datavalue.HireOrSale,
    datavalue.JobOpen,
    datavalue.Notes
    }
    );

var JobList = JobQuery.ToList();

无论如何,我需要获取列表并循环遍历它,我可以使用这样的东西:

foreach (var item in JobList){
    if (item.HireOrSale = 1)    {
        item.HireOrSale = "Sale";
    }   
    yield return item;
}

正如你可以看到我想要做的是将存储为INT的Hire或Sale更改为字符串以便在前端更好地读取,我无法将字符串转换为int,这是我得到的地方卡住。有没有办法我可以说在循环中构建另一个列表,以便允许我为每个列出不同的数据类型?或者有没有办法直接更改项目数据类型?

使用:

            var JobList = (from datavalue in dc.JobInformations
                           where datavalue.JobOpen == 1
                           select new
                           {
                               JobID = datavalue.JobID,
                               CompanyName = datavalue.CompanyName,
                               Contact = datavalue.Contact,
                               Date = datavalue.Date.ToShortDateString(),
                               HireOrSale = datavalue.HireOrSale == 2 ? "Service" :
                               datavalue.HireOrSale == 0 ? "Hire" :
                               datavalue.HireOrSale == 1 ? "Sale" : "",
                               JobOpen = datavalue.JobOpen == 1 ? "Awaiting Quote" :
                               datavalue.JobOpen == 2 ? "Quoted" :
                               datavalue.JobOpen == 3 ? "PO Recieved" :
                               datavalue.JobOpen == 4 ? "Goods On Order" :
                               datavalue.JobOpen == 5 ? "Goods Delivered" :
                               datavalue.JobOpen == 6 ? "Job Complete" :
                               datavalue.JobOpen == 20 ? "Job Cancelled" : "",
                               Notes = datavalue.Notes
                           }
                           );

3 个答案:

答案 0 :(得分:5)

var JobQuery = (from datavalue in dc.JobInformations
    where datavalue.JobOpen != 20
    select new
    {
       JobID = datavalue.JobID,
       CompanyName = datavalue.CompanyName,
       Contact = datavalue.Contact,
       Date = datavalue.Date,
       HireOrSale = datavalue.HireOrSale==1?"Sale":"",//if not 1, use your default value
       JobOpen = datavalue.JobOpen,
       Notes = datavalue.Notes
    }
    );

var JobList = JobQuery.ToList();

答案 1 :(得分:1)

要扩展Tim对您的问题的评论,如果您有多个选项(每个选项都映射到一个数字),这可能是非常很好地用于enum

public enum HireOrSale
{
    None = 0,
    Sale = 1,
    SomethingElse = 2,
    MoreStuff = 3
}

然后在您的LINQ语句中,您可以HireOrSale = (HireOrSale)datavalue.HireOrSaleint转换为正确的enum值。

当需要显示它时,您可以调用ToString,它将打印enum的名称。例如,下面的短代码段将打印“Sale”。

int input = 1;
HireOrSale enumValue= (HireOrSale)input;
String displayValue = enumValue.ToString();

答案 2 :(得分:0)

正确的解决方案是创建另一个对象,只包含前端所需的信息(A Viewmodel),它只包含需要显示JobInformation的字段:

一个例子是......

JobInfoViewModel

String HireOrSale int JobId 日期时间日期

然后你会创建一个List并使用它!

这样,您只需将所需信息传递给前端,不多也不少!