2013-07-25 1 views
0

LinqToSql을 사용하는 콘솔 응용 프로그램을 만들었습니다. 잘 작동하지만 코드 냄새라고 느낍니다.리팩터링하는 방법 C# linq 코드?

var personnelInfo = Personnels.Where(p => p.Name.Equals("Steve Jobs")); 

지금, 나는 그 객체의 다양한 분야에보고 할 : 여기 내 LINQ 쿼리입니다. 이것은

Console.WriteLine(String.Format("Emp ID = {0}", personnelInfo.Select(p => p.EmpID).FirstOrDefault())); 
Console.WriteLine(String.Format("Phone# = ({0}) {1}-{2}", 
    personnelInfo.Select(p => p.Phone).FirstOrDefault().Substring(0,3), 
    personnelInfo.Select(p => p.Phone).FirstOrDefault().Substring(3,3), 
    personnelInfo.Select(p => p.Phone).FirstOrDefault().Substring(6,4))); 
Console.WriteLine(String.Format("City = {0}", personnelInfo.Select(p => p.City).FirstOrDefault())); 

를 리팩토링 수 있습니다 : 이것은 내가 느끼는 것은 코드 냄새입니다?

답변

1

당신은 한 번 쿼리 결과를 얻어야한다 : 직접

var firstPerson = personnelInfo.First(); 

할 수 있습니다 다음 속성에 액세스.

또한 전화 번호 형식을 별도로 다시 사용할 수있는 기능으로 이동해야합니다. 거기에 또 다른 스티브 잡스 (Steve Jobs)가있을 수 있습니다으로

1

나는 foreach 문을 제안 :

foreach(var personel in personelInfo) 
{ 
    Console.WriteLine(String.Format("Emp ID = {0}", personel.EmpID)); 
    Console.WriteLine(String.Format("Phone# = ({0}) {1}-{2}", 
     personel.Phone.Substring(0,3), 
     personel.Phone.Substring(3,3), 
     personel.Phone.FirstOrDefault().Substring(6,4))); 
    Console.WriteLine(String.Format("City = {0}", personel.City)); 
}