我有两个表,外键。 linq以sql类为我生成的类。 现在我想让linq选择连接,会有什么结果? 是什么方式来产生类,为什么? 想要得到的东西像LINQ到SQL加入结果
IEnumerable<par_of_class1+part_of_class2>.
THX
我有两个表,外键。 linq以sql类为我生成的类。 现在我想让linq选择连接,会有什么结果? 是什么方式来产生类,为什么? 想要得到的东西像LINQ到SQL加入结果
IEnumerable<par_of_class1+part_of_class2>.
THX
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',你可以返回'o.Property'。随意与它玩耍,返回任何你想要的!
这取决于范围什么,你需要这样的“类型”。
如果你只需要访问这个结果在一个特定的方法,你可以投射结果为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 { }
这种类型外的方法,这样做:
select new SomeClass { ... } // projection into concrete class
和项目领域的成类(可以有适当的可访问性修饰符)。
另外(附注),请不要忘记回头接受一些答案(包括这个,如果它是正确的),因为它会导致更多的人为您提供帮助。
HTH