我想從LinQ語句創建一個實體對象,但我不想加載它的所有列。實體框架 - LinQ投影問題
我的ORDERS對象有很多列,但我只想檢索REFERENCE和OPERATION列,這樣SQL語句和結果會更小。
這LinQ在聲明中正常工作,並加載所有我的對象屬性:
var orders = (from order in context.ORDERS
select order);
而下面的語句未能
var orders = (from order in context.ORDERS
select new ORDERS
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION
});
拋出的錯誤是隻加載了我的兩個對象的屬性:
The entity or complex type 'ModelContextName.ORDERS' cannot be constructed in a LINQ to Entities query.
什麼問題?難道不可能通過這種方式部分加載對象嗎?
非常感謝您的回答。
ANSWER
好吧,我應該感謝你們Yakimych和Dean因爲我用你的答案的兩個,現在我有:
var orders = (from order in context.ORDERS
select new
{
REFERENCE = order.REFERENCE,
OPERATION = order.OPERATION,
})
.AsEnumerable()
.Select(o =>
(ORDERS)new ORDERS
{
REFERENCE = o.REFERENCE,
OPERATION = o.OPERATION
}
).ToList().AsQueryable();
而且我得到正是我想要的SQL語句不完美,但它只返回我需要的2列(和另一列包含每行「1」,但我不知道爲什麼暫時) - 我也嘗試用此方法構造子對象,它運作良好。
好的,我已經試過這個,但是我怎麼能把這個匿名對象轉換成我的實體類型呢? – mbp 2010-12-10 12:07:41
您不能將其映射到實體。您可以爲此創建自定義對象(DTO),但不能部分加載實體,因爲當您嘗試更改和安全它時,EF不知道如何處理它。 – Steven 2010-12-10 13:21:00