2014-01-06 3 views
1

누군가 다른 사람이 만든 C# 응용 프로그램에서 몇 가지 문제를 해결하고 (C# 프로그래머가 아니기 때문에) 취미가되었습니다. 나는 다음과 같이 조금 붙어있다. 당신은 내가 대여 또는 판매를 변경하면됩니다하려고 무엇을 볼 수있는linq list (int) item to (string)

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

:

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

어쨌든 나는 이런 식으로 뭔가를 사용하여 할 수있는 그것을 통해 목록 및 루프를 취할 필요 프런트 엔드에서 더 나은 읽기를 위해 문자열로 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

, 나는 그것을 위해'enum'을 만들고 열거 이름을 얻을 수있는 열거 형의 정수 값을 사용하십시오 (즉, 전화'ToString() enum * value *에 대해). – 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

문자열 HireOrSale INT 작업 ID 날짜 시간 날짜

다음은 목록을 작성하고 그 작업을 것입니다!

이렇게하면 필요한 정보 만 프론트 엔드에 전달할 수 있습니다.

1

하는 것은 귀하의 질문에 팀의 의견에 확장하려면이 여러 옵션이 경우 enum에 대한 매우 잘 활용 될 수있는 각 숫자에 매핑 : 당신의 LINQ 문에 그런

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

당신 HireOrSale = (HireOrSale)datavalue.HireOrSale을 사용하여 int을 올바른 enum 값으로 변환 할 수 있습니다.

표시 할 시간이되면 ToString이라고 할 수 있으며 enum이라는 이름이 인쇄됩니다. 예를 들어, 아래의 짧은 코드 세그먼트는 "Sale"을 인쇄합니다. 당신이 HireOrSale``값의 작은 유한 번호가있는 경우

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