【问题标题】:Entity Framework 5 Include table that may or may not contain matches实体框架 5 包括可能包含或不包含匹配项的表
【发布时间】:2013-03-19 21:08:24
【问题描述】:

我已经完成了所有工作并显示供应商,但我现在想添加一个列,显示哪些供应商已被选中(显示为复选框列)。这些选择存储在另一个表中,其中包含选择它们的 ProfileID 和 UserName(域用户)。因此,当当前域用户看到该表时,将匹配某些供应商而不是其他供应商。

我尝试了以下内容,但它给了我一个用户名错误。

System.Collections.Generic.ICollection' 不包含“用户名”的定义

但它确实包含此字段,我已在此表的其他查询中使用它(参见模型图片)。

IQueryable<VendorProfile> query = _db.VendorProfiles
     .Include("VendorsSelected")
     .Where(x => x.VendorsSelected.UserName.Contains(HttpContext.Current.User.Identity.Name))
     .OrderBy(v => v.ProfileID);

我使用的任何解决方案都必须考虑到存在匹配和不匹配(空值)的事实

【问题讨论】:

    标签: asp.net-mvc-4 entity-framework-5


    【解决方案1】:

    你应该选择UserName集合x.VendorsSelected:

    IQueryable<VendorProfile> query = _db.VendorProfiles
         .Include("VendorsSelected")
         .Where(x => x.VendorsSelected
                      .Select(v => v.UserName)
                      .Contains(HttpContext.Current.User.Identity.Name))
         .OrderBy(v => v.ProfileID);
    

    【讨论】:

    • 这听起来更好,但语法有些问题,因为它不喜欢那样。它现在抱怨 ProfileID 在最后一行是 undefiend 。似乎缺少“)”,但如果我添加整个 .Where 行抱怨(请参阅更新后的帖子)
    • 忘记了括号。已编辑。
    • 谢谢修复它!您对我在此查询中显示复选框真/假值的目标有任何建议吗?如果有匹配项,则上面的查询返回 VendorsSelected 的子集合,如果没有匹配项,则返回一个空集合。我如何最好地将其转化为视图?
    • 这应该在视图模型或具有您根据供应商存在设置的布尔值的 DTO 中处理。但是,如果您需要这方面的详细帮助,我建议您创建一个新问题,其标题将吸引合适的受众。我更像是一个数据访问/服务人员,试图尽可能避免使用 UI :)。
    • 关于上述查询的另一个问题。如何修改它以指定要返回的特定列,以便不返回整个模型。我试过 .Select(s => new { s.ProfileID, s.Name, s.CompanyName, s.City, s.State, s.DateCreated, s.VendorsSelected, s.VendorCategories }) 没有成功
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多