5

Entity Frameworkでは、カスタムクエリをオンザフライで実行してバインドできます...

protected class NitrogenMoisutreContainer
{
    public double MinN { get; set; }
    public double MaxN { get; set; }
    public double MinM { get; set; }
    public double MaxM { get; set; }
}

// ...

var q = dbcontext.Database.SqlQuery<NitrogenMoisutreContainer>(@"SELECT MAX(NitrogenBalance) as MaxN, MIN(NitrogenBalance) as MinN, MAX(FCWaterPercent) as MaxM, MIN(FCWaterPercent) as MinM
                                                                    FROM agZoneProjectionGrowthStages
                                                                    WHERE NitrogenBalance > 0 AND FCWaterPercent > 0").First();

問題は、私にとって、これは厄介だと感じることです。1つのクエリに対してこのクラスを作成する必要があり、他の目的でこのクラスを再び使用することはありません。結果は、実行された場所からちょうど1行下で使用されます。

匿名タイプを返す方法はありますか?私が最初にそれを宣言しなければならなかったとしても、このように...

var anonItem = new {
    MinN = 0d,
    MaxN = 0d,
    MinM = 0d,
    MaxM = 0d
};

var q = dbcontext.Database.SqlQuery<anonItem.GetType()>("...");

Type匿名タイプをとして渡す方法がわかりませんT。出来ますか?

4

2 に答える 2

5

これは、タイプを推測できるように設定すると実行できます。例えば

public static IEnumerable<T> GetObjects<T>(T exampleItem, string sqlQuery) { ... }
var q = GetObjects(anonItem, @"");

これは少しハックだと思います。実際に名前付きクラスを作成したり、タプルを使用したりするなど、別のアプローチを試すことをお勧めします。

于 2012-09-05T20:50:34.763 に答える
2

問題は、私にとって、これは厄介だと感じることです。1つのクエリに対してこのクラスを作成する必要があり、他の目的でこのクラスを再び使用することはありません。結果は、実行された場所からちょうど1行下で使用されます。

これは問題ではないと思います。

匿名タイプを返す方法はありますか?

代わりにタプルを作成できます。

于 2012-09-05T20:51:01.300 に答える