linq to sql join结果

时间:2010-10-05 10:39:42

标签: .net linq

我有两个表,带有外键。 linq为我的类生成的sql类。 现在我想让linq选择加入,加入的结果是什么? 是什么方式生成类,为此结果? 想得到像

这样的东西
IEnumerable<par_of_class1+part_of_class2>. 

THX

2 个答案:

答案 0 :(得分:2)

这取决于范围,您需要这个“类型”。

如果您只需要在特定方法中访问此结果,则可以将结果投影到 anonymous type (因为它们只有方法范围)。

示例:

var result = (from a in tablea join b in tableb
            on a.key equals b.key
            select new { 
                PropertyOne = a.Something, 
                PropertyTwo = b.Something 
             }).SingleOrDefault();

在该示例中,结果将是一个匿名类型,包含两个属性PropertyOne和PropertyTwo。

注意,在调用 SingleOrDefault 之前,查询是IQueryable<T>,因此您可以选择使用.ToList()将结果集投影到集合中。

修改select new(称为'projection')以包含您想要的任何内容。

如果您需要访问 此类型的方法,而不是select new { },请执行以下操作:

select new SomeClass { ... } // projection into concrete class

并将字段投影到该类(可以具有适当的辅助功能修饰符)。

另外(在旁注中),请不要忘记返回并接受您的一些答案(包括此答案,如果正确的话),因为这会导致更多人为您提供帮助。

HTH

答案 1 :(得分:0)

RPM1984是正确的。这是另一种加入的方式,虽然比较麻烦,但值得一提:

TableOne
    .Join(
        TableTwo,
        x => x.TableOneID, //selector for the outer table (TableOne)
        x => x.TableOneFK, //selector for the inner table (TableTwo).  These values are what the tables are joined on
        (o,i) => new { Outer = o, Inner = i, Property = o.Property } //new anonymous class where o is a record from TableOne, and i is a record from TableTwo
    );

如果您不想这样做,则不必返回匿名类。连接的返回真的可以是你想要的。你可以只返回'o.Property',如果这就是你想要的,或者只是'o'。随意玩它来回报你想要的任何东西!