2013-08-05 1 views
0

Если у меня есть lystId, я хочу включить объект MemberProductLyst и фильтр с помощью LystId.Как создать следующий LINQ .join(), если представлен дополнительный элемент фильтра?

Любые предложения по правильному способу реализации последующего кода Lamba внутри if (! String.IsNullOrEmpty (lystId)) {} блок ниже исходного запроса ???

products = (from p in dc.Products 
join t in dc.Tags on p.TagId equals t.TagId 
join pi in dc.ProductImages on p.ProductId equals pi.ProductId 
join i in dc.Images on pi.ImageId equals i.ImageId 
where p.IsActive == true 
where t.TagId == new Guid(brandId) 
orderby p.CreatedOn descending 
select new ProductItem 
{ 
    productImage = i.FileName, 
    productId = p.ProductId, 
    description = p.Description, 
    name = p.Name, 
    adImage = t.AdImage 
}).Skip(totalItemCount).Take(pageSize); 

if (!string.IsNullOrEmpty(lystId)) 
{ 
    //Include MemberProductLyst table to Filter by lystId if LystId is available 
    var memberLysts = from mpl in dc.MemberProductLysts 
    where mpl.LystId == new Guid(lystId) 
    select new { mpl.LystId, mpl.ProductId }; 

    products = (IQueryable<ProductItem>)products.Join(memberLysts, p => p.productId, mpl => mpl.ProductId, (p, mpl) => new {ProductItem = p, MemberProductLyst = mpl }); 
} 
+0

ли цель объединения, чтобы отфильтровать определенные продукты, которые дон У вас есть совпадения или для обеспечения множественности экземпляров продуктов, связанных с одним и тем же lyst несколько раз? Или вы действительно хотите получить информацию о memberProductLysts, связанных с данными продуктами? – StriplingWarrior

ответ

0

Это в значительной степени зависит от намерения вашего Join, но я подозреваю, что это может дать результаты, которые вы ищете:

products = products.Where(
    p => memberLysts.Any(mpl => mpl.ProductId == p.productId)); 
Смежные вопросы