【发布时间】:2017-02-15 17:36:10
【问题描述】:
我想使用 Entity Framework 从 2 个表中返回数据,以及从 2 个表中选择的列,起初我对一些简单的事情不太幸运,比如返回 int 和字符串(即@987654321 @,因为在目的地(目的地是我的 winform)强制转换匿名类型很麻烦,所以我想到了只返回两个表行的想法......
所以是这样的:
public static IQueryable<{Table1,Table2}> byRecID(Guid recID, MyContext DBContext)
{
return (from i1 in DBContext.Table1
join j1 in DBContext.Table2 on i1.GroupID equals j1.GroupID
where i1.RecID.Equals(RecID)
select new { i1, j1 }).SingleOrDefault();
}
这一切都很好,除了方法的返回类型不正确。我尝试了几种组合。不幸的是,当我从 winform 调用“byRecID”时,“SingleOrDefault”不可用,但在“byRecID”方法中可用,所以我不能只返回IQueryable,需要输入IQueryable<SOMETHING IN HERE>(因为@ 987654325@ 不是IQueryable 的扩展,只有IQueryable<T>)。
我的问题... 'SOMETHING IN HERE' 的语法是否可以让我指定它的两个表行的连接?
我想知道...为什么 SingleOrDefault 是方法内部的选项,而不是从我的 winform 调用时方法结果的选项?
基本上,我希望能够从我的 winforms 中调用干净的数据,而不是转换为可怕的匿名类型然后使用反射(比如当我返回匿名类型的原语时),但也不想仅仅为通过我的byRecID 方法使用。
【问题讨论】:
-
你不能从方法中返回匿名类型。你需要一个具体的类型
-
你可以,它们只是很难使用,这是我的观点,我想要一种将自己描述为其他两种类型的连接的类型。
-
另外,你执行查询,所以结果不是某事的 IQueryable,它是某事
-
抱歉@George,您的意思是匿名类型不能在方法签名中吗?因为我认为 untyped iqueryable 基本上是匿名类型的列表,略有不同。
-
因为您可以做某事并不意味着您应该做。请记住,您只需编写一次,但您(更重要的是其他人)将阅读代码多年。我认为您应该选择最干净的设计,即结果的新模型类
标签: c# linq entity-framework-6