- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个看似简单的帖子表,其中包含多个投票,如下所示:
帖子:
namespace Api.Models
{
public class Post
{
public int id { get; set; }
public bool deleted { get; set; }
public virtual User creator { get; set; }
(...)
public virtual ICollection<Vote> votes { get; set; }
}
}
投票:
namespace Api.Models
{
public class Vote
{
public int id { get; set; }
public bool seen { get; set; } = false;
(...)
[JsonIgnore]
[IgnoreDataMember]
public virtual ICollection<Post> post { get; set; }
}
}
这在 SQL 数据库中生成了一个 VotePost 表,其中 Vote_id 和 Post_id 作为外键。
如果帖子有 0 票或所有投票都被看到,我试图仅获取与带有 p.creator.user_id 的帖子相关的见过 == false 的投票。那么我就不需要返回post元素了
帖子有多个投票对象,我不知道如何过滤掉所有投票。seen == false
IQueryable<Post> postQuery = (from p in db.Posts where
p.deleted == false &&
p.creator.user_id == user_id &&
// all p.votes object seen == false ?
select p);
预先感谢您的帮助
最佳答案
所以你有用户、帖子和投票。
有一个one-to-many relation创建者和帖子之间:每个创建者都有零个或多个帖子,每个帖子都属于一个创建者。
似乎有a many-to-many relation between Posts and Votes:每个帖子都有零个或多个投票,每个投票都支持零个或多个帖子。
我不确定您为什么选择偏离标准 Entity Framework 约定并省略类定义的外键。这只会让你的查询变得更加困难。但我们必须按照您的设计进行操作。
你写道:
I am trying to only get the Votes that seen == false that are connected to the post with p.creator.user_id, if the post has 0 votes or all votes are seen. Then I don't need to return the post element
我认为这是一种困难且有点模棱两可的表达方式:
给定一个变量 user_id,它是用户的主键。给我一个查询,该查询会产生所有未看到的投票,这些投票具有主键 user_Id 的创建者帖子。
var result = dBContext.Votes
.Where(vote => !vote.Seen
&& vote.Posts.Any(post => post.Creator.user_id == user_id);
如果您在类中包含外键,它甚至会更简单:
class User
{
public int Id {get; set;} // primary key
// a User has zero or more Posts:
public virtual ICollectioins<Post> Posts {get; set;}
...
}
class Post
{
public int Id {get; set;} // primary key
// Every Post belongs to exactly one User via foreign key
public User User {get; set;}
public int UserId {get; set;}
// a Post has zero or more Votes (many-to-many)
public virtual ICollection<Vote> Votes{get; set;}
...
}
class Vote
{
public int Id {get; set;} // primary key
// A vote is for zero or more Posts (many-to-many)
public virtual ICollection<Post> Posts{get; set;}
public bool Seen {get; set;}
}
您可能对某些属性的命名不同,但您明白了要点。
一旦您将外键包含到帖子的用户中,您的查询就变得更加简单:
var result = dBContext.Votes
.Where(vote => !vote.Seen
&& vote.Posts.Any(post => post.userid == user_id);
建议:每当您想到偏离 entity framework code first conventions 时,例如对主键和外键使用非常规名称,对 ICollection 属性使用非常规名称等。请三思:这种偏差真的需要吗?
偏离意味着需要流畅的Api,或者说属性。维护:其他人不会立即明白你的意思。您的查询可能会变得更加困难
关于c# - IQueryable 来自 Code First Entity Framework 的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400596/
var page = pagesRepository.GetPages(); var categoryPages = page.ChildCategoryPages; var articlePages
是否可以将 IQueryable 对象转换为 IQueryable,其中 T 是映射实体? (T 将是 POCO 类)。 提前致谢。 最佳答案 就 Cast() 它。假设它是相同类型的可查询。否则你可
我只是想知道为什么会有一个 IQueryable没有通用功能的版本? 最佳答案 The generic IQueryable is the one you use most often in meth
我有一个 IQueryable它是根据一些输入参数(排序和过滤器)创建的。 可以应用这个 IQueryable到 DbSet我有DbContext ? 例如: // create the query
我们正在尝试转换 IQueryable 的实例到 IQueryable , SpecificEntityObject类型仅在运行时已知。 我们已尝试使用下面的代码,该代码无法编译,因为类型或命名空间
最近几天我在互联网上搜索了解决方案,但没有找到我想要的。基本上,这是我的问题: 我有一个需要实现的接口(interface),它有一个返回 IQueryable 的方法(我无权访问该接口(interf
与IEnumerable相同对比IEnumerable .这是疏忽吗?或者当您没有指定类型来实现像 .Count() 这样的扩展时,是否存在问题? , .Where()等不可能? 最佳答案 来自doc
这是 Automapper 专业人员的问题。我已经尝试做查询映射好几天了——但没有成功。似乎 Automapper 不打算按照我想要的方式使用它。但也许我错了。那么问题来了…… 我有这样的类(clas
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭去年。 Improve th
我有一个类Something实现 ISomething .如何从 IQueryable 转换/转换到 IQueryable .当我尝试转换时,我能够编译,但转换的结果始终为 NULL。 背景:我这样做
我了解协方差,并且我知道一般来说在 v4.0 之前它在 C# 中是不可能的。 但是我想知道一个具体案例。有什么方法可以进行转换IQueryable至IQueryable通过以某种方式创建一个包装类,该
如果IQueryable接口(interface)在服务器中执行查询表达式,而不是像 IEnumerable 那样获取所有记录,为什么是IQueryable未被 IEnumerable 取代哪里可以更
这个问题在这里已经有了答案: Why covariance and contravariance do not support value type (4 个答案) 关闭 7 年前。 为什么编译器不
我想做这样的事情 public IQueryable GetPaged(IQueryable query, int startIndex, int pageSize) {
我正在开发一个使用新 Web API 的项目,我注意到有人从 Get 方法返回了一个 IQueryable。 我的理解是 IQueryable 可用于提高性能(延迟执行),但我认为 HTTP 连接另一
我正在重构我的 EF 存储库类以使其可测试,遵循这篇优秀博客文章中的建议: https://blog.iannelson.uk/testing-linq-queries/ 一切都很好,我也能够像在博客
我有一个包含 IQueryable 的通用函数其中每一行都包含一个具有一组属性的类的实例。 我有另一个类 (MyClass),它具有与上面的类 T 相同的一些属性...即相同的名称和数据类型。 我还有
我正在尝试使用 Automapper 将 IQueryable 映射到 IQueryable 以生成 Linq。我正在开发一个带有 Entity Framework 和 oracle 11g 的 We
我有一个对象是: IQueryable 我想将它传递给一个函数,该函数需要: IQueryable Foo 确实实现了 IFoo 为什么不能编译?什么是最好的转换方式来让这项工作发挥作用? 最佳答案
我有一个查询可以获取一些过滤后的数据,但它给了我一些奇怪的结果。使用 VS Code 调试器查看附件图像(var source 是一个 Queryable,类似于 _dbContext.ModelNa
我是一名优秀的程序员,十分优秀!