2016-08-14 51 views
1

我有以下格式的LINQ查詢。問題是,我以列表的形式傳遞100 consumerID的列表。我想查詢數據庫併爲 所有這100個consumerIds帶來結果。然而,查詢僅爲第一個人帶來了結果。我懷疑我在where子句中缺少某些東西。我確信在所有這100個consumerIds的數據庫中都有匹配的結果。問題與查詢數據庫使用LINQ查詢帶來的DTO列表

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; } 
} 
+0

有多少項目在'consumerIDs'參數?以及「Deleted = true」表中有多少條記錄? – Shyju

+0

我不明白你正在創建類型E的列表,但函數返回類型ConsumerExchangeChangeDto - 這怎麼能編譯? – Hogan

回答

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; 
}