2011-06-09 32 views
1

当您正在编写一个涉及两个表/实体的linq查询时,您已经在实体框架数据模型中定义了它们之间的关系,您是否必须在查询中定义连接或者是否存在使用已定义关系的不同语法?Linq到两个表的实体

var q = 

    from c in categories 

    join p in products on c equals p.Category into ps 

    select new { Category = c, Products = ps }; 

否则在EF模型中定义关系有什么意义?

回答

2

如果一切设置正确,你将有一个代表外键关系的参考属性,在这种情况下,你应该能够做这样的事情:

var q = from c in categories 
     select new {Category = c, Products = c.Products}; 
+0

我有我的两个实体之间的导航属性设置,但关系是1> 0..1,当我试图写任何类型的涉及这两个linq查询它是抛出一条错误消息,说:“类型推断失败打电话给'SelectMany'“。我是否在做错误的事情,阅读有人建议使用实体引用的错误,但我不知道这是否属实? – suggy1982 2011-06-10 22:07:44

+0

@ suggy1982你可以在你的问题中发布一个LINQ查询的例子吗? – Clayton 2011-06-10 22:11:39

+0

实体不同于我原来的问题,供应商实体是PK&DirectSupplier实体是FK.I想要返回直接供应商的供应商。 VS正在强调“s.DirectSupplier”,并且在源类型为“System.Data.Objects.ObjectSet ”的查询表达式的后续from子句中不允许出现“TransactionScopeTest.DirectSupplier类型的表达式” 'SelectMany'中的类型推断失败“ var q =(从s in db.Suppliers from d in s.DirectSupplier select d); – suggy1982 2011-06-10 22:31:33

2

您的类别实体中应该有一个名为Products的导航属性,其中包含所有相关的产品实体,您应该使用此属性而不是手动连接。

+0

谢谢我将检查我的模型中的设置。 – suggy1982 2011-06-09 20:44:16

+0

我有我的2个实体之间的导航属性设置,但关系是1> 0..1,当我试图写任何类型的涉及这两个linq查询它是抛出一条错误消息,说:“类型推断失败打电话给'SelectMany'“。我是否在做错误的事情,阅读有人建议使用实体引用的错误,但我不知道这是否属实? – suggy1982 2011-06-10 22:08:22