【问题标题】:Issue with querying database using LINQ query to bring list of DTO使用 LINQ 查询查询数据库以带来 DTO 列表的问题
【发布时间】:2016-08-14 21:18:05
【问题描述】:

我有一个以下格式的 LINQ 查询。问题是我以列表的形式传递了 100 个consumerID 的列表。我想查询数据库并为 所有这 100 个消费者 ID。然而,查询只为第一个人返回结果。我怀疑我在 where 子句中遗漏了一些东西。我确信所有这 100 个 consumerId 的数据库中都有匹配的结果。

public ICollection<ConsumerExchangeChangeDto> GetByConsumers(List<int> consumerIDs)
{
    EnrollmentReportingModel db = (EnrollmentReportingModel)Context.DbContext;
    var results = (from ecew in db.A
        join ecewe in db.B on ecew.ID 
        equals ecewe.ExchangeChangeEnrollmentWindowID into temp
        from j in temp.DefaultIfEmpty()
        join cecr in db.C on ecew.ConsumerExchangeChangeRequestID equals cecr.ID
        join con in db.D on cecr.ConsumerID equals con.ID
        where consumerIDs.Contains(con.ID) && !ecew.Deleted
        select new E
        {
            ConsumerID = con.ID,
            OrganizationID = con.OrganizationID,
            StartDate = ecew.StartDate,
            EndDate = ecew.EndDate,
            Deleted = ecew.Deleted
        }).ToList();
    return results;
}

这里是 dto 类

public class E : ILzDto
{
  public int ConsumerID { get; set; }
  public int OrganizationID { get; set; }
  public DateTime? StartDate { get; set; }
  public DateTime? EndDate { get; set; }
  public bool Deleted { get; set; }
}

【问题讨论】:

  • consumerIDs 参数中有多少项?以及Deleted=true 的表中有多少条记录?
  • 我不明白您正在创建一个类型 E 的列表,但该函数返回类型 ConsumerExchangeChangeDto -- 这如何编译?

标签: sql asp.net-mvc linq


【解决方案1】:

我认为你想要任何,而不是包含:

public ICollection<ConsumerExchangeChangeDto> GetByConsumers(List<int> consumerIDs)
{
    EnrollmentReportingModel db = (EnrollmentReportingModel)Context.DbContext;
    var results = (from ecew in db.A
        join ecewe in db.B on ecew.ID 
        equals ecewe.ExchangeChangeEnrollmentWindowID into temp
        from j in temp.DefaultIfEmpty()
        join cecr in db.C on ecew.ConsumerExchangeChangeRequestID equals cecr.ID
        where consumerIDs.Any(x => x == cecr.ConsumerID) && !ecew.Deleted
        select new E
        {
            ConsumerID = cecr.ConsumerID,
            OrganizationID = con.OrganizationID,
            StartDate = ecew.StartDate,
            EndDate = ecew.EndDate,
            Deleted = false 
        }).ToList();
    return results;
}

【讨论】:

    猜你喜欢
    • 2018-04-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
    相关资源
    最近更新 更多