![](/img/trans.png)
[英]How to query database using LINQ to bring data from database based on array of months in ASP.Net MVC 5?
[英]ASP.NET MVC 5 - LINQ Query to Select Data from Database
我正在使用ASP.NET MVC 5进行学校项目。该项目是关于创建社交网络的。 用户登录后,他将在新闻源中看到所有公开帖子。 但是,在显示数据库中公开帖子的数据时遇到了问题。
这是数据库的脚本:
create table Utilizador(
id_utilizador integer not null identity(1,1),
nome varchar(50) not null,
apelido varchar(50) not null,
username varchar(15) not null unique,
pass varchar(50) not null,
email varchar(50) not null unique,
sexo char(1) not null CHECK (sexo IN('M', 'F')),
país varchar(50) not null,
imagem_perfil varchar(50) not null,
data_nascimento date not null,
estado int not null default 2, --0->Bloqueado 1-Activo, 2-por activar
primary key (id_utilizador),
check (email LIKE '%@%.%')
)
create table Post(
id_post integer not null identity(1,1),
texto varchar(400) not null,
primary key(id_post)
)
create table Publish_Post(
id_post integer not null,
id_utilizador integer not null,
data timestamp not null,
primary key(id_post),
foreign key(id_post) references Post(id_post),
foreign key(id_utilizador) references Utilizador(id_utilizador)
)
create table Privacy(
id_privacidade integer not null identity(1,1), --> 1 public, 2 private
nome varchar(50) not null,
primary key(id_privacidade)
)
create table Have_Privacy(
id_post integer not null,
id_privacidade integer not null,
primary key(id_post),
foreign key(id_post) references Post(id_post),
foreign key(id_privacidade) references Privacidade(id_privacidade)
)
让我解释一下为什么要以这种方式创建数据库:用户创建并发布一些具有隐私值(1或2)的帖子。 用户登录后,所有公开帖子(1)都应出现在其新闻源上。 到目前为止,我在C#中有此LINQ查询:
var id_posts = from p in db.Posts
select p.texto;
ViewBag.Posts = id_posts;
有人能帮我吗? 提前致谢 :)
做这个
var id_posts = from p in db.Posts
join hp in db.Have_Privacy on p.id_post equals hp.id_post
join prv in db.Privacy on hp.id_privacidade equals prv.id_privacidade
where prv.nome = 'Private'
select p.texto;
告诉它如何
为什么不在Post
添加一个名为isprivate
的字段,该字段的BIT
类型为boolean来确定其是否私有,然后使用where
子句对提供的数据使用查询:
var id_posts = from p in db.Posts
where isprivate == false
select p.texto;
如果您想拥有两种以上的隐私类型,并且只坚持使用您提供的数据库模式 ,则可以使用JOIN
:
如果id确定它是私有的:
var id_posts = from p in db.Posts
join hp in db.Have_Privacy on p.id_post equals hp.id_post
where hp.id_privacidade = 1
select p.texto;
如果名称确定它是私有的:
var id_posts = from p in db.Posts
join hp in db.Have_Privacy on p.id_post equals hp.id_post
join prv in db.Privacy on hp.id_privacidade equals prv.id_privacidade
where prv.nome = 'Private'
select p.texto;
另外请注意,以一种语言命名表格并以另一种语言命名列被认为是错误的设计。 即使我知道它的含义,其他人(在本例中为我)也很难阅读。 最后两个查询使用您的架构,未实现任何更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.