繁体   English   中英

ASP.NET MVC 5-从数据库选择数据的LINQ查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM