【问题标题】:LINQ to EF Working with Lookup TablesLINQ to EF 使用查找表
【发布时间】:2013-04-16 21:26:54
【问题描述】:

我有一个主 VendorProfile 表和一个包含状态代码和日期戳的 1-many VendorHistory 表。下面的查询仅用于检索每个供应商的最新状态(状态代码和日期)。但是,我还想做的是将状态代码转换为状态名称,该名称位于 StatusCodes 查找表中。

Model Diagram

public IEnumerable<BrowseStatusModel> BrowseByStatus()
{
    IQueryable<BrowseStatusModel> viewModel = _db.VendorProfiles
    .Include("VendorStatusHistory")
    .Include("StatusCodes")
    .Select(s => new BrowseStatusModel
    {
        ProfileID = s.ProfileID,
        Name = s.Name,
        CompanyName = s.CompanyName,
        DateCreated = s.DateCreated,
        Status = s.VendorStatusHistories.OrderByDescending(o => o.DateCreated).FirstOrDefault().Status, 
        StatusDate = s.VendorStatusHistories.OrderByDescending(o => o.DateCreated).FirstOrDefault().DateCreated,
        StatusName = ???
    })
    .OrderBy(x => x.ProfileID);
    return viewModel;
}

作为额外的跟进,我想知道如何修改上述查询以仅返回 VendorHistory 表中有匹配行的供应商 - 以排除没有历史记录的记录。

【问题讨论】:

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


    【解决方案1】:

    您可以先选择最后一个VendorStatusHistory,然后再选择其属性:

    _db.VendorProfiles
    .Select(s => new { 
                       Profile = s, 
                       LastHist = s.VendorStatusHistories
                                   .OrderByDescending(o => o.DateCreated)
                                   .FirstOrDefault()
                     })
        .Select(x => new BrowseStatusModel
        {
            ProfileID = x.Profile.ProfileID,
            Name = x.Profile.Name,
            CompanyName = x.Profile.CompanyName,
            DateCreated = x.Profile.DateCreated,
            Status = x.LastHist.Status, 
            StatusDate = x.LastHist.DateCreated,
            StatusName = x.LastHist.StatusCOde.StatusName
        })
        .OrderBy(x => x.ProfileID);
    

    【讨论】:

    • @GertArnold,我在多次查找时遇到了类似的问题,除了在我的情况下,我必须获取集合而不是一条记录,在上面的示例中,它不是一个供应商,会有单个配置文件 ID 的供应商集合,它并不像我说的那样简单,因为有多个级别的查找....如果您发布示例,这将很有帮助
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多