联系加入EF

时间:2013-03-09 14:55:27

标签: c# linq-to-sql

我使用两个表

对EF和linq2sql有以下问题

表1:

Id | Name
1  | Name1
2  | Name2

表2:

Id | Table1Id | Name
1  | 1        | SomeText1
2  | 1        | SomeText2
3  | 2        | SomeText3

我想创建一个linq2sql查询,以获取带有模板的结果集

Table1Id:contact(Table2.Name+";")

例如

1:SomeText1;SomeText2
2:SomeText3

1 个答案:

答案 0 :(得分:0)

今天早上有几分钟的时间,所以请在下面找到一个示例实施。除了为实现所需目的而指定的表之外,还需要在两个表之间添加关联(多对多)。这将在连接表上运行,并为两个实体添加导航属性。

下面的查询实质上是说选择表1条目并包含Table2导航属性中的相关记录。对于该示例,我在上下文中关闭了延迟加载(您应该几乎所有时间都这样做,因为它会导致问题跨层和/或在您的应用程序中序列化时)。

        // db first
        using (var db = new SO15312066Entities())
        {
            // iterate over table 1, with join values from 2
            var query = db.Table1.Include("Table2");

            foreach (var item in query)
            {
                Console.WriteLine("{0}:{1}", item.Id, string.Join(";", item.Table2.Select(x => x.Name).ToList()));
            }
        }

        //output
        //1:SomeText1;SomeText2
        //2:SomeText3

此实现的假设是它首先是EF数据库(正如您最初所说的那样,您在EF中遇到了问题)。 SO15312066Entities是查询的ObjectContext。

我没有检查过它的效果如何,我会在实际实施中将其留给您。