Sql server Asp.net MVC Lambda语法基本的连接和包含

Sql server Asp.net MVC Lambda语法基本的连接和包含,sql-server,entity-framework,linq,join,filter,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,

我有两张桌子

产品

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])
)
CREATE TABLE [dbo].[Catagory] 
(
    [Id]       INT          IDENTITY (1, 1) NOT NULL,
    [cat_name] VARCHAR (50) NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC)
)
分类

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])
)
CREATE TABLE [dbo].[Catagory] 
(
    [Id]       INT          IDENTITY (1, 1) NOT NULL,
    [cat_name] VARCHAR (50) NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC)
)
使用以下示例数据:

产品

分类

我想创建一个动作方法

public ActionResult ViewProducts(string Key)// contains category name
{
    var product = db.products.where(p => p.p_cat.contains(key));
    return View(product);
}
此方法应返回category等于key的所有产品。e、 g所有产品均属于衬衫类

我知道如何在SQL中实现这一点,但lambda语法对我来说是新的

请帮忙,谢谢

这是我的模型


code>var product=db.products.where(p=>p.Categories.cat\u name==key)


成员的名称可能会有所不同,这取决于EF对您的表进行反向工程的方式。

请使用下面的查询更改您的Linq查询

var product = (from p in db.products
                join c in db.categoryies ON p.p_cat equals  c.Id
                 where c.cat_name.Contains(key)
                select p).ToList();
注意:实体名称可能因您的EF实体名称而异。

您能否加入产品(p_cat)和类别(Id)并使用类别过滤记录

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);
    }

产品包含类别id,类别名称显示在类别表中。请再次查看该表。Thanks@Zeeshanhack忘记SQL,学习使用EF导航属性(我认为这个答案的意思是,
产品
表相关类除了
p_cat
FK属性外,还应该有一个指向
类别
类的导航属性。只需找到导航属性的调用方式,并使用该名称而不是
类别
)@Zeeshanhack,如果你能发布
产品
类-它是如何由EF生成的,那就更好了。打字错误提示:这是一个“类别”(而不是“类别”)无法声明局部变量c。很抱歉,它是“类别”而不是“类别”。您能再次回答我吗?但我只需要产品,您能重新编写查询吗?谢谢我的更改,var product=db.products.Join(db.catagories,p=>p.p_cat,c=>c.Id,(p,c)=>new{product=p,catagoriy=c})。其中(x=>x.catagoriy.cat_name.Contains(key)).ToList();我只希望查询返回productsHi Zeeshan.。只需在.Where之后添加.Select(x=>x.product)(x=>x.Category.cat_name.Contains(key))@Zeeshanhack好的。如果答案对您有效,请标记答案。