我有两个表,带有外键。 linq为我的类生成的sql类。 现在我想让linq选择加入,加入的结果是什么? 是什么方式生成类,为此结果? 想得到像
这样的东西IEnumerable<par_of_class1+part_of_class2>.
THX
答案 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'。随意玩它来回报你想要的任何东西!