2014-01-06 71 views
1

我一直负责修复其他人制作的C#应用​​程序中的某些问题(某人离开了公司),而我并不是真正的合格C#程序员,我有点卡住了以下。C#将LINQ列表(int)项目更改为(字符串)

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存储到一个字符串,以更好地阅读前端,我不能将一个字符串转换为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 
          } 
          ); 
+0

如果你有一个小的和有限数量'HireOrSale'值的,我会创建一个'enum'它并使用枚举的整数值来获取枚举名称(例如,调用'的ToString ()'在枚举*值*)。 – Tim

回答

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(); 
+0

结束了使用这样的东西看到我原来的帖子。 – Sam

0

正确的解决方法,是创建另一个对象,只用所需要的前端(A视图模型)的信息,这将只包含需要被显示的字段JobInformation的:

一个例子是...

JobInfoViewModel

String HireOrSale int JobId DateTime date

然后您将创建一个List并使用它!

这样,你只传递到前端需要的信息,不多,不少!

1

为了扩大对您的问题Tim的评论,这可能是如果您有多个选项的enum一个非常很好用,每个映射到一个号码:

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

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

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

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