2

次のLINQ式を取得しました。

Context.TableOne.Select(
            one =>
            new
            {
                one.Column1,
                one.Column2,
                one.Column3,
                one.Column4,
                one.Column5,
                one.Column6,
                one.Column7,
                one.Column8,
                one.Column9,
                TwoCount = one.TableTwo.Count()
            });

私がこれとしてそれを選ぶとき:

Context.TableOne.Select(
            one =>
            new
            {
                One = one,
                TwoCount = one.TableTwo.Count()
            });

「one」のすべてのフィールドを含むネストされたプロパティ「One」を取得します。これには、(たとえば、データグリッドで)FieldNamesを指定する必要があります。または、One.Column1またはOne.Column2の代わりにColumn1Column2

TwoCount = one.TableTwo.Count()この式のすべての列を指定しなくても、-Statementを含めることはできますか?

4

5 に答える 5

1

代わりにエンティティ全体を選択できます。

Context.TableOne.Select(one => new {
    One = one,
    TwoCount = one.TableTwo.Count()
});
于 2012-11-27T14:07:18.907 に答える
0

EntityFrameworkを使用しているすべての人のために、次のソリューションがあります。

TableOne名前空間に部分クラスを作成し、そこに新しいプロパティを追加します。

public partial class TableOne
{
    public int TwoCount { get { return Two.Count; } }
}

このようにして、エンティティ全体を選択できます。 var result = Context.TableOne;

于 2012-11-27T14:56:26.340 に答える
0

はい、最初にすべての列を選択する必要があると思われる理由については混乱していますが。

于 2012-11-27T14:07:36.040 に答える
0

各プロパティではなく、オブジェクト全体を選択します。

Context.TableOne.Select(
    one =>
        new
        {
            One = one,
            TwoCount = one.TableTwo.Count()
        });
于 2012-11-27T14:08:02.687 に答える
0

使用new {....}すると、新しい匿名型が作成されます。次に、オブジェクト初期化構文を使用してその型のプロパティを設定します。これを実際に何が起こっているのかに分解すると、理解しやすいかもしれません。

まず、新しい type を作成していますFoo。これを3つのプロパティに単純化しましょう

public class Foo
{
    public object Column1 { get; set; }
    public object Column2 { get; set; }
    public int TwoCount { get; set; }
}

それでは、select であるラムダ式を見てみましょう。これを以下のような関数に抽出できます。

public Foo CreateFoo(TableOne one)
{
    Foo foo = new Foo();
    foo.Column1 = one.Column1;
    foo.Column2 = one.Column2;
    foo.TwoCount = one.TableTwo.Count();

    return foo;
}

ご覧のとおり、各プロパティを設定する必要があります。Fooこのロジックは匿名型ではないため、コンストラクターまたはクラス内の別の場所にカプセル化できます。ただし、匿名型の場合、できることはありません。

于 2012-11-27T14:37:51.377 に答える