实体框架嵌套的lambda查询

时间:2012-08-22 13:29:07

标签: asp.net entity-framework

在Linq2Sql中,可以进行如下查询:

using (var db = GetDataContent())
            {
                var query = from p in db.Brands
                            where p.Deleted == false
                            select new BrandImageSummary
                            {
                                BrandID = p.BrandID,
                                BrandUrl = p.BrandUrl,
                                Description = p.Description,
                                MetaDescription = p.MetaDescription,
                                MetaKeywords = p.MetaKeywords,
                                MetaTitle = p.MetaTitle,
                                BrandImageUrl = (from p2 in db.SiteImages where p2.FileTypeID == 5 && p2.ForeignID == p.BrandID && p2.Deleted == false orderby p2.Rank select p2.Filename).FirstOrDefault(),
                                Deleted = p.Deleted,
                                SupplierCode = p.SupplierCode,
                                Title = p.Title,
                                Website = p.Website
                            };

                return query.ToList();
            }

使用BrandImageUrl作为嵌套选择。在实体框架中,我似乎得到了错误:

  

无法创建“SiteImage”类型的常量值。只有原始   在此上下文中支持类型或枚举类型。

有没有办法在实体框架中执行此操作?

查询的想法是获得一个品牌形象,如果我要加入,并且有多个图像,我会得到多行,我不想要这个。

我正在使用Entity Framework 5。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您应该在模型类中创建一对多关系。

然后你可以写

BrandImageUrl = p.BrandImages
                 .Where(i => i.FileTypeID == 5 && !i.Deleted)
                 .OrderBy(i => i.Rank)
                 .Select(i => i.FileName)
                 .FirstOrDefault()