Asp.net MVC Lambda语法加入和包含的基础

时间:2017-09-10 09:08:48

标签: sql-server entity-framework linq join filter

我有两张桌子

产品

CREATE TABLE [dbo].[product] 
(
    [Id]       INT           IDENTITY (1, 1) NOT NULL,
    [p_name]   VARCHAR (50)  NOT NULL,
    [p_desc]   VARCHAR (250) NULL,
    [p_price]  VARCHAR (50)  NOT NULL,
    [p_colour] VARCHAR (70)  NULL,
    [p_cover]  VARCHAR (50)  NOT NULL,
    [p_front]  VARCHAR (50)  NOT NULL,
    [p_back]   VARCHAR (50)  NULL,
    [p_add1]   VARCHAR (50)  NULL,
    [p_add2]   VARCHAR (50)  NULL,
    [p_cat]    INT           NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC),

    CONSTRAINT [FK_product_catagory] 
        FOREIGN KEY ([p_cat]) REFERENCES [dbo].[catagory] ([Id])
)

Catagory

CREATE TABLE [dbo].[Catagory] 
(
    [Id]       INT          IDENTITY (1, 1) NOT NULL,
    [cat_name] VARCHAR (50) NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC)
)

使用以下示例数据:

Product

Catagory

我想创建一个动作方法

public ActionResult ViewProducts(string Key)// contains category name
{
    var product = db.products.where(p => p.p_cat.contains(key));
    return View(product);
}

此方法应返回类别等于key的所有产品。例如,所有产品都属于衬衫类别。

我知道如何在SQL中执行此操作,但lambda语法对我来说是新的。

请帮忙,谢谢

这是我的模特 Click to view model

edo

3 个答案:

答案 0 :(得分:1)

var product = db.products.where(p => p.Categories.cat_name == key);

成员名称可能会有所不同,具体取决于EF如何反向设计表格名称。

答案 1 :(得分:0)

请使用以下内容更改您的Linq查询。

List<String> list = Arrays.asList("1", "2", "3", "4", "5");
String commaSeparated = String.join(",", list);
System.out.println(commaSeparated); //gives you 1,2,3,4,5

注意:实体名称可能因您的EF实体名称而异。

答案 2 :(得分:0)

您可以加入Product(p_cat)和Category(Id)并使用Cateroty过滤掉记录吗?

public ActionResult ViewProducts(string Key)// contains category name
    {
        var product = db.products
            .Join(db.categoryies, 
                p => p.p_cat,
                c => c.Id,
                (p,c) => new { Product = p, Category = c })
            .Where(x => x.Category.cat_name.Contains(key)).ToList();
        return View(product);
    }