【问题标题】:Return column based on record in FK table根据 FK 表中的记录返回列
【发布时间】:2013-03-10 06:59:53
【问题描述】:

我有一个显示供应商的成功查询,但我现在想添加一个显示已选择或未选择供应商的列(显示为复选框列)。这些选择存储在 VendorsSelected 表中,该表包含选择它们的 FK ProfileID 和 UserName。因此,当当前用户查看供应商时,将匹配某些供应商而不是其他供应商。

如何修改查询?请注意,下面的 Where 子句将仅获取当前用户选择的供应商,但我想要的是所有供应商都显示为他们选择的每个供应商的真/假(复选框)列。

public IEnumerable<BrowseVendorModel> BrowseVendors()
{
    IQueryable<BrowseVendorModel> viewModel = _db.VendorProfiles
        .Include("VendorsSelected")
        .Select(s => new BrowseVendorModel
        {
            ProfileID = s.ProfileID,
            Name = s.Name,
            CompanyName = s.CompanyName,
            City = s.City,
            State = s.State,
            DateCreated = s.DateCreated
        })
        .Where(x => x.VendorsSelected.Select(s => s.UserName).Contains(HttpContext.Current.User.Identity.Name))
        .OrderBy(v => v.ProfileID);

    return viewModel;
}

【问题讨论】:

    标签: c# linq entity-framework linq-to-entities entity-framework-5


    【解决方案1】:

    向视图模型添加属性Selected (boolean):

    public IEnumerable<BrowseVendorModel> BrowseVendors()
    {
        IQueryable<BrowseVendorModel> viewModel = _db.VendorProfiles
            .Include("VendorsSelected")
            .Select(s => new BrowseVendorModel
            {
                ProfileID = s.ProfileID,
                Name = s.Name,
                CompanyName = s.CompanyName,
                City = s.City,
                State = s.State,
                DateCreated = s.DateCreated,
                Selected = x.VendorsSelected.Select(s => s.UserName)
                            .Contains(HttpContext.Current.User.Identity.Name)
            })
            .OrderBy(v => v.ProfileID);
    
        return viewModel;
    }
    

    【讨论】:

    • 天哪,我不知道你能做到这一点。我花了数年时间编写 SQL,但不得不重新学习使用 LINQ 的方式。我该去哪里学习成为像你这样的 LINQ 忍者? :) 谢谢
    • 我猜继续做吧:)
    • 发布了另一个LINQ Ninja question对上述查询的修改。
    • 我发布了另一个 LINQ problem 没有得到答复,希望您能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多