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好的。如果答案对您有效,请标记答案。