4

私は複雑なSQLクエリを使用しています。単純な方法でSqlQueryを使用する必要があります。

モデル:

public class C
{
    public int ID { get; set; }
    [NotMapped]
    public float Value { get; set; }
}

コントローラ:

IEnumerable<C> results = db.C.SqlQuery(@"SELECT ID, ATAN(-45.01) as Value from C);
return View(results.ToList());

見る:

@model IEnumerable<C>
@foreach (var item in Model) {
    @Html.DisplayFor(modelItem => item.Value)
}

item.Valueの結果はNULLです。

だから私の質問は、SQLクエリから計算された値をどのように出力できますか?

助けてくれてありがとう。

4

1 に答える 1

1

0であるという事実から、ValueEFは返された列をモデルにマップされていないプロパティにマップしないと結論付けます。

別の方法として試すことができるのは、ヘルパータイプを定義することです...

public class CHelper
{
    public int ID { get; set; }
    public float Value { get; set; }
}

次に、このタイプを照会し、後で値をエンティティにコピーします。

IEnumerable<C> results = db.Database.SqlQuery<CHelper>(
    @"SELECT ID, ATAN(-45.01) as Value from C")
    .Select(ch => new C
    {
        ID = ch.ID,
        Value = ch.Value
    });

(通常、LINQ-to-Entitiesクエリでは、を使用してエンティティに投影することはできませんSelect。ただし、Select上記の例では、データベースクエリに影響を与えず、メモリ内のLINQ-to-Objectsであるため、許可する必要があります。Iただし、わかりません。)

コレクションはコンテキストにアタッチされておらず、コンテキストによって追跡されていないことに注意してください。ただしresults、GETリクエストでビューをレンダリングするためにコレクションは必要ないと思います。

もちろん、ビューモデルとしてのクラスに基づいてビューを直接作成し、エンティティCHelperへの変換を省略できます。C

于 2012-10-30T17:06:47.950 に答える