Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何重构C#linq代码?_C# 4.0_Linq To Sql_Refactoring - Fatal编程技术网

C# 4.0 如何重构C#linq代码?

C# 4.0 如何重构C#linq代码?,c#-4.0,linq-to-sql,refactoring,C# 4.0,Linq To Sql,Refactoring,我已经创建了一个使用LinqToSql的控制台应用程序。它工作得很好,但我觉得这是一种代码气味。以下是我的linq查询: var personnelInfo = Personnels.Where(p => p.Name.Equals("Steve Jobs")); 现在,我想报告该对象的各个字段。这就是我感觉到的代码气味: Console.WriteLine(String.Format("Emp ID = {0}", personnelInfo.Select(p => p.EmpI

我已经创建了一个使用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()));

这可以重构吗?

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

var firstPerson = personnelInfo.First();
然后可以直接访问属性


您还应该将电话号码格式设置为一个单独的可重复使用功能。

我建议使用foreach,因为可能还有另一个Steve Jobs:

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