2011-08-10 65 views
1

有什么办法'加入'两个数据库表,所以我可以从第一个表中获得ID然后使用此ID从第二个表中获取描述?Linq到实体加入两个表

例如,下面的查询获取零件ID,但我需要找到该零件ID的描述,以便将描述放到数据网格上。我试图在Web服务器端使用'Include',但在运行时失败。

var query = myContext.Get_Table1(); 
query = query.Where(c => c.Part_ID == '12345'); 
LoadOperation<My.Web.Table1> loadOp = this.maxContextTransactionHistory.Load(query, QueryCompletedCallback, null); 
this.dataGrid.ItemsSource = loadOp.Entities; 

回答

1

我认为您使用的是WCF RIA Services?如果您标记了您的问题以表明这一点,那将会很有帮助。

如果是这种情况,您需要在DomainService中使用Include方法将相关实体包含在查询结果中。

您还需要将IncludeAttribute应用于关联,以确保它们被整理到客户端。您可以将该属性应用于覆盖here的'Buddy'类。

理论上,直接将IcludeAttribute应用于生成的实体类中的属性就足够了。在那里,他们会被覆盖。

下一个选择将在部分类。在那里添加具有相同签名的另一个属性(以便可以将该属性应用于该属性)会导致与原始属性的冲突。

解决方案是使用在部分类中定义的新类。元数据类型属性用于部分类以指示定义其元数据的类。

以下代码将确保将Part_Stock的Part_Table发送给客户端时包含它。您将需要类似的代码来覆盖您感兴趣的任何其他属性。

[MetadataTypeAttribute(typeof(Part_Stock.Metadata))] 
public partial class Part_Stock 
{ 

    internal sealed class Metadata 
    { 
     // Metadata classes are not meant to be instantiated. 
     private Metadata() 
     { 
     } 

     [Include] 
     public EntityCollection<Stock_Table> Stock_Table { get; set; } 
    } 
} 
+0

非常感谢您的帮助。我将'Include()'添加到实体文件中,但我不知道如何将'IncludeAttribute'部分添加到哪个文件(metadata.cs文件)?你会提供添加IncludeAttribute部分的更多细节吗?感谢你的帮助。这是'Include()“部分:return this.ObjectContext.Part_Stock.Include(”Part_Table“)。Include(”Part_Table.Part_Description“); –

+0

我已经添加了'Buddy'类的代码。 –