我想使用Entity Framework从2个表中返回数据,并选择这2个表的一些列。起初我并没有成功地尝试一些简单的操作,例如返回int和string(即
select new { id = t1.ID, other = t2.OtherData }
),因为在目标应用程序(我的Winform)中转换匿名类型十分繁琐。所以我考虑了一下,决定直接返回这2个表的行... 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>
(因为SingleOrDefault
不是IQueryable
的扩展,只有IQueryable<T>
)。
我的问题是...是否有一种语法让我指定它是两个表行的连接?
我想知道...为什么SingleOrDefault选项在方法内部是可用的,但在从winform调用该方法的结果中却无法使用?
基本上我希望找到一些能够让我从winforms进行干净数据调用的东西,而无需将其转换为丑陋的匿名类型,然后使用反射(就像当我返回原始的匿名类型时),但也不想生成一个类型,仅供我的byRecID
方法使用。