2013-01-25 98 views
0

我使用Linq從數據庫和實體框架中選擇項目來創建我的實體。實體框架還使用導入功能嚮導創建了複雜類型。每次我使用任何複雜類型返回查詢時,我會嘗試將結果強制轉換爲複雜返回類型時會得到空值。Linq Casting返回類型作爲複雜類型

private AWorksLTEntities db = new AWorksLTEntities(); 

public IQueryable<SelectAll_Result> SelectAllMethod() 
{ 
    var result = from p in db.Products 
       select p; 
    return result as IQueryable<SelectAll_Result>; 
} 

SelectAll_Result是EntityFrameworks創建的複雜類型和演員不工作,我的方法返回null。

使用正常的實體相同的代碼不會返回值

private AWorksLTEntities db = new AWorksLTEntities(); 
public Product SelectAllMethod() 
{ 
    var result = from p in db.Products 
       select p; 
    return result; 
} 

我的問題是,雖然這個例子很簡單,我創建這個使用代碼生成我的工作,並返回類型查詢很難確定,所以我需要能夠使用實體框架函數導入生成的複雜返回類型,而不是標準實體返回。

任何想法?提前致謝。

+0

是否由EF生成'SelectAllMethod'? –

+0

不,它是由我正在處理的T4模板生成的。我解析一堆存儲過程並從中創建方法。因爲它們是隨時生成的,所以我需要使用複雜的returntypes,而不僅僅是對EF實體進行編碼。 –

回答

2

演員經營者不知道如何從一個類轉換到另一個不相關的類。你必須自己提供轉換:

public IQueryable<SelectAll_Result> SelectAllMethod() 
{ 
    var result = from p in db.Products 
       select new SelectAll_Result() { a = p.a, b = p.b, ... }; 
    return result; 
} 
+0

謝謝!我得到錯誤「實體或複雜類型'SelectAll_Result'現在不能在LINQ to Entities查詢中構建 - 但至少我是在那裏的一半。 –

+0

@LindaKeating EF LINQ支持很差。請儘量保持SelectAll_Result爲簡單「DTO」類具有默認的ctor和可寫的自動屬性。 – usr