2012-10-29 27 views
4

,我必須使用SqlQuery類......在簡單的方法:怎麼我使用複雜的SQL查詢,打印已不能映射值

MODEL:

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()); 

VIEW:

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

and the the item.Value的結果爲NULL。

所以我的問題是,我怎樣才能從SQL查詢打印計算值?

謝謝你的幫助。

回答

1

我會從Value爲0的事實得出結論,即EF不會將返回的列映射到未在模型中映射的屬性。

你可以嘗試什麼作爲一種替代方法是定義一個輔助型......

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,因此應該允許。我不確定,但。)

請注意,results集合未附加到上下文並被上下文跟蹤,但我想你不需要它來獲取呈現視圖的GET請求。

當然,您可以基於CHelper類作爲視圖模型直接創建視圖,並省略轉換爲C實體。

+0

不幸的是,它沒有奏效,代碼 返回查看(results.ToList());我收到: 由於物化值爲空,轉換爲值類型'Single'失敗。結果類型的泛型參數或查詢都必須使用可爲空的類型。 並返回查看(結果);我有所有空值 – IcanMakeIt

+0

我很抱歉有多條評論。在調試模式下,lambda表達式'ch'爲空。數據庫沒有返回任何值?或者查詢沒有發送到數據庫?我覺得解決方案非常接近。請幫忙。 – IcanMakeIt

+0

'public class CHelper { public int ID {get;組; } public float?價值{get;組; } }' 'Value'在一個記錄中爲'null'。我將該值設置爲「可空」。現在它的工作。謝謝Slauma。 – IcanMakeIt