Использование AND в JOIN в LINQ - PullRequest
0 голосов
/ 12 июня 2019

У меня есть такой SQL:

SELECT Items.ItemCode AS code, Items.ItemName AS name, ISNULL(PLID.PriceOverule,Items.ItemPrice) AS price from tblPLItemsDetail PLID
INNER JOIN tblItems Items ON PLID.ItemID = Items.ItemID 
AND Items.ValidityTo IS NULL
WHERE PLItemID = @PLItemID 
AND PLID.ValidityTo IS NULL 
AND (PLID.ValidityFrom >= @LastUpdated OR @LastUpdated IS NULL)

Я поместил это в LINQ:

details = context.TblPlitemsDetail
          .Join(imisContext.TblItems, 
              p => p.ItemId, 
              i => i.ItemId, 
              (p, i) => new { TblPlitemsDetail = p, TblItems = i })
          .Where(r => r.TblPlitemsDetail.PlitemId == PLItemID 
              && r.TblPlitemsDetail.ValidityTo == null 
              && (r.TblPlitemsDetail.ValidityFrom >= Convert.ToDateTime(model.last_update_date) || model.last_update_date == null))
          .Select(x => new CodeNamePrice() 
          { 
              code = x.TblItems.ItemCode, 
              name = x.TblItems.ItemName, 
              price = (x.TblPlitemsDetail.PriceOverule == null) ? x.TblItems.ItemPrice.ToString() : x.TblPlitemsDetail.PriceOverule.ToString() 
          }).ToList();

Я переписал большую часть кода, но я не реализовал AND Items.ValidityTo IS NULLПредикат в JOIN.

Как это сделать правильно?

1 Ответ

2 голосов
/ 12 июня 2019

Поскольку это INNER JOIN, вы можете указать дополнительный предикат (Items.ValidityTo IS NULL) в предложении LINQ Where:

details = context.TblPlitemsDetail
          .Join(imisContext.TblItems, p => p.ItemId, i => i.ItemId, (p, i) => new { TblPlitemsDetail = p, TblItems = i })
          .Where(r => !r.TblItems.ValidityTo.HasValue) 
          .Where(r => r.TblPlitemsDetail.PlitemId == PLItemID && r.TblPlitemsDetail.ValidityTo == null && (r.TblPlitemsDetail.ValidityFrom >= Convert.ToDateTime(model.last_update_date) || model.last_update_date == null))
          .Select(x => new CodeNamePrice() { code = x.TblItems.ItemCode, name = x.TblItems.ItemName, price = (x.TblPlitemsDetail.PriceOverule == null) ? x.TblItems.ItemPrice.ToString() : x.TblPlitemsDetail.PriceOverule.ToString() }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...