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

使用linq投影查询获取单个值,而不使用FirstOrDefualt,linq,linq-to-entities,entity-framework-6,Linq,Linq To Entities,Entity Framework 6,我正在使用实体框架,这是我的视图模型: public class UserDetailsModel:CityModel { public int Id { get; set; } public string Fullname { get; set; } } public class VendorInCategoryModel { public int CategoryId { get; set; } public int Vend

我正在使用实体框架,这是我的视图模型:

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


那么如何克服这个问题呢?有人能帮我吗?

看起来您的outer select可能能够返回多个结果(例如,如果有多个具有相同Id的UserDetails模型)。如果它返回多个结果,那么对.SingleOrDefault()的调用将引发异常,因为它只需要一个结果或不需要结果。有关更多详细信息,请参阅。

在某些情况下,它给了我错误的输出-您能在这里提供更多的上下文吗?我无法在这里的评论中解释您。主要问题是:您需要理解为什么
。FirstOrDefault
给了您错误的结果。如果你不明白这一点,也没有找到解决办法——仅仅切换到另一个函数是没有帮助的。您需要了解您的数据和查询!