I'm having trouble to convert an EF linq Sample into OrmLite. I've got most of the query nailed, but some deep joins or subqueries is reasing some problems.
This is my EF query:
var q = from orderProduct in orderProducts
join order in _erpContext.Orders.Include(x => x.BillingAddress.Country) on orderProduct.OrderId equals order.Id
join product in _erpContext.Products.Include(x => x.ProductCategories).Include(x => x.ProductManufacturers) on orderProduct.ProductId equals product.Id
where (storeId == 0 || storeId == order.StoreId) &&
(!startDate.HasValue || startDate.Value <= order.DateCreated) &&
(!endDate.HasValue || endDate.Value >= order.DateCreated) &&
(!orderStatusId.HasValue || orderStatusId == (int)order.OrderStatus) &&
(!orderTypeId.HasValue || orderTypeId == (int)order.OrderType) &&
(!paymentStatusId.HasValue || paymentStatusId == (int)order.PaymentStatus) &&
(!shippingStatusId.HasValue || shippingStatusId == (int)order.ShippingStatus) &&
(!order.Deleted) &&
(!product.Deleted) &&
(categoryId == 0 || product.ProductCategories.Count(pc => pc.CategoryId == categoryId) > 0) &&
(manufacturerId == 0 || product.ProductManufacturers.Count(pm => pm.ManufacturerId == manufacturerId) > 0) &&
(billingCountryId == 0 || order.BillingAddress.CountryId == billingCountryId);
As you can see, I'm using the Include() function inside the Joins. That is the part were I'm stuck.
This is my OrmLite query:
var q = _erpDbConnection.From<OrderProduct>()
.Join<Order>((x, y) => x.OrderId == y.Id)
.Join<Product>((x, y) => x.ProductId == y.Id)
.Where<OrderProduct>(x => x.ProductId != null && !x.Order.ContainsFreeMaterial && !x.Order.IsFitSizeOrder && x.Order.OrderType != OrderType.Stock)
.And<Order, Product>((o, p) => !o.Deleted && !p.Deleted);
if (storeId > 0)
{
q = q.And<Order>(x => x.StoreId == storeId);
}
if (billingCountryId > 0)
{
q = q.And<Order>(x => x.BillingAddress.CountryId == billingCountryId);
}
if (startDate.HasValue)
{
q = q.And<Order>(x => x.DateCreated <= startDate);
}
if (endDate.HasValue)
{
q = q.And<Order>(x => x.DateCreated >= endDate);
}
if (orderStatusId.HasValue)
{
q = q.And<Order>(x => (int) x.OrderStatus == orderStatusId);
}
if (orderTypeId.HasValue)
{
q = q.And<Order>(x => (int)x.OrderType == orderTypeId);
}
if (paymentStatusId.HasValue)
{
q = q.And<Order>(x => (int)x.PaymentStatus == paymentStatusId);
}
if (shippingStatusId.HasValue)
{
q = q.And<Order>(x => (int)x.ShippingStatus == shippingStatusId);
}
if (categoryId > 0)
{
q = q.And<Product>(x => x.ProductCategories.Any(y => y.CategoryId == categoryId));
}
if (manufacturerId > 0)
{
q = q.And<Product>(product => product.ProductManufacturers.Any(y => y.ManufacturerId == manufacturerId));
}
var filteredOrderProducts = _erpDbConnection.Select<OrderProduct>(q);