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

C# ASP.NET MVC 5-从数据库中选择数据的LINQ查询,c#,sql,asp.net-mvc,database,linq,C#,Sql,Asp.net Mvc,Database,Linq,我正在用ASP.NETMVC5做一个学校项目。该项目是关于创建一个社交网络。用户登录后,将在其新闻提要上看到所有公共帖子。 不过,在从数据库中显示公共帖子的数据时,我遇到了一些问题 这是数据库的脚本: create table Utilizador( id_utilizador integer not null identity(1,1), nome varchar(50) not null, apelido

我正在用ASP.NETMVC5做一个学校项目。该项目是关于创建一个社交网络。用户登录后,将在其新闻提要上看到所有公共帖子。 不过,在从数据库中显示公共帖子的数据时,我遇到了一些问题

这是数据库的脚本:

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;
有人能帮我吗?
提前感谢:

为什么不在Post中添加一个名为isprivate的字段,该字段的位为布尔类型,用于确定它是否为私有,然后使用where子句查询提供的数据:

如果您想拥有两种以上的隐私,只需坚持您提供的DB模式,您可以选择加入:

如果id决定它是私有的:

如果名称决定它是私有的:

另外请注意,用一种语言命名表和用另一种语言命名列被认为是糟糕的设计。这个例子中的其他人很难让我阅读它,即使我知道它应该是什么意思。 最后两个查询使用您的模式,但未执行任何更改。

只需执行此操作即可

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;

告诉我进展如何

谢谢你的建议,但是这篇文章可以有很多类型的隐私:/但是我需要一个表来保护隐私,orders教授--但是非常感谢你:我已经更改了一个查询,所以它直接使用了你的DB模式。现在有什么问题?如果它解决了您的问题,请将其标记为已回答。如果没有,请告诉我它不符合哪些要求。如果它回答了您的问题,请将其标记为已回答。谢谢
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;
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;