使用下面的简单示例,使用Linq将多个表中的结果返回到SQL的最佳方法是什么?
说我有两个表:
Dogs: Name, Age, BreedId Breeds: BreedId, BreedName
我想把所有的狗都带回来BreedName。我应该让所有的狗都使用这样的东西而没有问题:
BreedName
public IQueryable<Dog> GetDogs() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select d; return result; }
但是,如果我想要带有品种的狗并尝试这样做,则会遇到问题:
public IQueryable<Dog> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new { Name = d.Name, BreedName = b.BreedName }; return result; }
现在,我意识到编译器不允许我返回一组匿名类型,因为它期望使用Dogs,但是有没有一种方法可以不必创建自定义类型而返回该匿名类型呢?还是我必须为其创建自己的类DogsWithBreedNames并在选择中指定该类型?还是有另一种更简单的方法?
DogsWithBreedNames
我倾向于这种模式:
public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } } public IQueryable<DogWithBreed> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new DogWithBreed() { Dog = d, BreedName = b.BreedName }; return result; }
这意味着您有一个额外的类,但是它快速且易于编码,易于扩展,可重用且类型安全。