2

私はこのクラスを持っています:

public class MyClass
{
    public int Id { get; set; }
    public int MyId1 { get; set; }
    public int MyId2 { get; set; }
    public int MyId3 { get; set; }
    public string MyName { get; set; }
}

私はList<MyClass>

私はクエリを行います:

var result = (from my in MyClass
             where Id == 5
             select my).First();

結果として、MyId1、MyId2、および MyId3 のリストが必要です

何か案が ?

ありがとう、

4

2 に答える 2

4
var result = (from my in list
             where my.Id == 5
             select new List<int>() { my.MyId1, my.MyId2, my.MyId3 }).First();
于 2012-11-27T13:04:19.410 に答える
1

あなたのコードには2つのステップがあると思います:(1)必要なオブジェクトを取得し、(2)そのオブジェクトをリストに変換します。したがって、実際には、次のようなものがより適切だと思います。

var firstResult = list.First(my => my.Id == 5);
var result = new List<int>{firstResult.MyId1, my.MyId2, my.MyId3};

このアプローチは、よりシンプルであり、意図をより明確に示すため、わずかに優れています。

単一責任の原則を考慮してください。コードを変更する理由は 1 つだけにする必要があります。あなたのコード (および Arsen のコード) には、この機能がありません。要件が変更され、クラスを変更するか、リストにプロパティを追加する必要がある場合は、フィルタリング ロジックを変更する必要があります。しかし、これらの 2 つの側面は直交しており、そのような状況では変更すべきではないことは明らかです。

ところで、リストに変換するクラス MyClass に拡張メソッドまたは単純なメソッドを追加できます。この場合、コードはさらに読みやすくなります。

var result = list.First(my => my.Id == 5).ToListOfInt();
于 2012-11-27T15:17:43.057 に答える