为了账号安全,请及时绑定邮箱和手机立即绑定

返回匿名类型结果?

返回匿名类型结果?

C#
四季花海 2019-06-18 16:44:58
返回匿名类型结果?使用下面的简单示例,使用Linq返回多个表的结果到SQL的最佳方法是什么?假设我有两张桌子:Dogs:   Name, Age, BreedIdBreeds: BreedId, 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并在SELECT中指定该类型?或者还有更简单的方法?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

你,你们能,会,可以返回匿名类型,但它真的不漂亮.

在这种情况下,我认为创建适当的类型要好得多。如果它只在包含该方法的类型中使用,则将其设置为嵌套类型。

就我个人而言,我希望C#能得到“命名匿名类型”-即与匿名类型相同的行为,但是具有名称和属性声明,但仅此而已。

编辑:其他人建议返回狗,然后通过属性路径等访问品种名称。这是一种非常合理的方法,但IME会导致这样的情况:由于您想要使用的数据-以及当您返回时丢失了该元信息-您已经以特定的方式进行了查询。IEnumerable<Dog>-查询可能是期待你要用(比如说)Breed而不是Owner由于一些加载选项等,但如果您忘记了这一点,并开始使用其他属性,您的应用程序可能工作,但没有你最初设想的那么高效。当然,我可能是在胡说八道,或者过于乐观,等等.


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 585 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信