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 に答える