使用linq投影查询获取单个值,而不使用FirstOrDefault

时间:2014-10-18 04:16:54

标签: linq linq-to-entities entity-framework-6

我正在使用Entity Framework,这是我的视图模型:

public class UserDetailsModel:CityModel
{
    public int Id { get; set; }     
    public string Fullname { get; set; }
 }

 public class VendorInCategoryModel
 {
        public int CategoryId { get; set; }
        public int VendorId { get; set; }
        public virtual CategoryMasterModel CategoryMaster { get; set; }
        public virtual UserDetailsModel UserDetails { get; set; }
 }

 public class CategoryMasterModel
 {
        public int CategoryId { get; set; }
        public string CategoryName { get; set; }
 }

这是我的查询以获取供应商详细信息以及特定供应商的类别详细信息v001

UserDetailsModel workerDetails = context.UserDetails.
                                     Where(d => d.Id == _vendorId).
                                     Select(d => new UserDetailsModel
                                                 {
                                                    Id = d.Id,
                                                    Fullname = d.Fullname,
                                                    CategoryId = d.VendorInCategory.Select(v => v.CategoryId).FirstOrDefault(),
                                                 }).SingleOrDefault();

我在这里使用FirstOrDefault来获取categoryId(即单值)

但是我不想使用FirstOrDefault,就像我在很多查询中使用的那样,在某些情况下它会给我错误的输出。这就是为什么我不想使用FirstOrDefault

当我写SingleOrDefualt代替FirstOrDefault时,它会让我犯错误 使用FirstOrDefault

那么如何克服这个?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

看起来你的外部选择可能会返回多个结果(例如,如果有多个具有相同Id的UserDetailsModel)。如果它返回多个结果,那么对.SingleOrDefault()的调用将抛出异常,因为它只需要一个结果或没有结果。有关详细信息,请参阅LINQ: When to use SingleOrDefault vs. FirstOrDefault() with filtering criteria