返回匿名类型结果?

返回匿名类型结果?

使用下面的简单示例,使用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中指定该类型?或者还有更简单的方法?


四季花海
浏览 591回答 3
3回答

慕后森

你,你们能,会,可以返回匿名类型,但它真的不漂亮.在这种情况下,我认为创建适当的类型要好得多。如果它只在包含该方法的类型中使用,则将其设置为嵌套类型。就我个人而言,我希望C#能得到“命名匿名类型”-即与匿名类型相同的行为,但是具有名称和属性声明,但仅此而已。编辑:其他人建议返回狗,然后通过属性路径等访问品种名称。这是一种非常合理的方法,但IME会导致这样的情况:由于您想要使用的数据-以及当您返回时丢失了该元信息-您已经以特定的方式进行了查询。IEnumerable<Dog>-查询可能是期待你要用(比如说)Breed而不是Owner由于一些加载选项等,但如果您忘记了这一点,并开始使用其他属性,您的应用程序可能工作,但没有你最初设想的那么高效。当然,我可能是在胡说八道,或者过于乐观,等等.
打开App,查看更多内容
随时随地看视频慕课网APP