2010-10-05 148 views
0

我有两个表,外键。 linq以sql类为我生成的类。 现在我想让linq选择连接,会有什么结果? 是什么方式来产生类,为什么? 想要得到的东西像LINQ到SQL加入结果

IEnumerable<par_of_class1+part_of_class2>. 

THX

回答

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',你可以返回'o.Property'。随意与它玩耍,返回任何你想要的!

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 { }这种类型的方法,这样做:

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

和项目领域的成类(可以有适当的可访问性修饰符)。

另外(附注),请不要忘记回头接受一些答案(包括这个,如果它是正确的),因为它会导致更多的人为您提供帮助。

HTH