2014-05-22 70 views
0

我创建了一个windows窗体应用程序来显示我的数据库中的所有数据。引用Linq-to-SQL中附表的字段

因此数据库有一个名为项目表,分表称为标签,而这两个表有一个1:M的关系。我可以将Linq-to-SQL类添加到我的项目中,然后创建一个DataGrid以访问主Items表,而不会有任何问题。

望着那被LINQ到SQL创建项目类的属性,我可以看到它有标签表连接到它(EntitySet的),但我不能访问任何的标签字段!有没有办法做到这一点?

我想在datagrid中创建一个名为TagsList的新列,并且对于每个Item,我想要显示所有对应的连接列表Tags.Name。我想我可以做这样的事情添加新的属性到项目类像这样:

public partial class Items 
    { 
    public string TagsList 
     { 
     return this.Tags.Name.Aggregate((x, y) => x + ", " + y)); 
     } 
    } 

但很明显,这是行不通的,因为它没有定义。帮帮我?

回答

0

我假设Items.TagsICollection<Tags>型(或IQueryableIEnumerable,我不记得是哪LINQ到SQL使用),为您指出ItemsTags有一个一对多的关系。如果情况并非如此,请告诉我,我会酌情删除或编辑我的答案。

Name是每个人Tags上的财产,而不是收集这就是为什么Tags.Name是不正确的。

尝试以下操作:

return this.Tags.Select(tag => tag.Name).Aggregate((x, y) => x + ", " + y)); 

Tags.Select(tag => tag.Name)将返回名称IEnumerable<string>,然后你汇整这些。

+0

你是对的 - Select方法确实给我提供了我想要的值,并且我可以从中汇总名称列表。不幸的是,结果产生的速度非常慢 - 查看SQL分析器指示对主Items表执行一次数据库调用,而对EACH Items执行一次调用。从我想要实现的目标中,必须有更有效的方法来做到这一点。 –