2013-07-25 56 views
0

我創建了一個使用LinqToSql的控制檯應用程序。它工作得很好,但我覺得它是一種代碼味道。這裏是我的linq查詢:如何重構C#linq代碼?

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

現在,我想報告該對象的各個領域。這是我覺得是代碼味道:

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

然後,您可以訪問屬性。

您還應該將電話號碼格式轉換爲單獨的可重用功能。

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