Linq Where子句有两个条件,不起作用

时间:2017-12-06 07:52:54

标签: linq

我有三张桌子:

[Products]
    Id
    Title
    Info
    Price

[ProductCategories]
    Id
    Title
    ParentId

[ProductsInCategories]
    Id
    ProductId
    ProductCategoryId

我正在尝试阅读特定类别的精选产品。我的代码没有使ProductCategoryId更加一致,只是从Product表中加载所有产品。哪里是我的错误?:

id-variable是方法参数。进来的价值是正确的。

var ProdInCat = from p in _context.Products
                from pc in _context.ProductsInCategories
                    .Where(x => p.Id == x.ProductId && x.ProductCategoryId == id)
                    .DefaultIfEmpty()
                select new
                {
                    p.Id,
                    p.Title,
                    p.Info,
                    p.Price
                };

2 个答案:

答案 0 :(得分:1)

使用内部联接表达式

var ProdInCat = from p in _context.Products
                from pc in _context.ProductsInCategories.Where(x => x.ProductCategoryId == id).DefaultIfEmpty()
                on p.Id equals pc.ProductID
                select new {
                    p.Id,
                    p.Title,
                    p.Info,
                    p.Price
                };

答案 1 :(得分:1)

您可以根据外部(计算的)id将类别中的产品过滤产品加入产品。

from p in _context.Products
join pc in _context.ProductsInCategories.Where(pic => pic.ProductCategoryId == id).DefaultIfEmpty() 
on p.Id equals pc.ProductId 

有关如何通过以下链接实现此目的的更多信息:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause