2013-01-25 63 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