0

我创建了一个使用 LinqToSql 的控制台应用程序。它工作得很好,但我觉得这是一种代码味道。这是我的 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()));

这可以重构吗?

4

2 回答 2

1

您应该只得到一次查询结果:

var firstPerson = personnelInfo.First();

然后,您可以直接访问属性。

您还应该将电话号码格式移动到单独的可重用函数中。

于 2013-07-25T02:39:43.807 回答
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));
}
于 2013-07-25T11:40:27.363 回答