我将首先展示一些代码,然后我将尝试告诉您我想要什么。
Thread thread = db.Threads
.AsNoTracking()
.FirstOrDefault(x=>x.Name == name);
var threadTopics = db.Topics
.AsNoTracking()
.Where(x => x.ThreadId == thread.Id && x.PinType != PinType.Advertisement)
.ToList();
thread.Topics = threadTopics;基本上,我想我的主题,但我不需要所有的主题,我只需要“不广告”的主题。这对我来说很有效,但我觉得我可以用一个请求来做这件事,但我不知道怎么做。
我试过了,但它不起作用:
Thread thread = db.Threads
.AsNoTracking()
.Where(x=>x.Name == name)
.Select(x=> new Thread
{
Topics = x.Topics.Select(x=>x.PinType != PinType.Advertisement)
});型号:
class Thread {
int ThreadId {get;set;}
ICollection<Topic> Topics {get;set;}
}
class Topic {
int TopicId {get;set;}
int ThreadId {get;set;}
Thread Thread {get;set;}
PinType PinType {get;set;}
}发布于 2016-10-15 07:54:10
Thread thread = db.Threads
.AsNoTracking()
.Where(x=>x.Name == name)
.Select(x=> new Thread
{
Topics = x.Topics.Select(x=>x.PinType != PinType.Advertisement)
});左边是线程,右边是IEnumberable。您还会错过new Thread中的Id。将其更改为:
var threads = db.Threads
.AsNoTracking()
.Where(x=>x.Name == name)
.Select(x=> new Thread
{
ThreadId = x.ThreadId,
Topics = x.Topics.Where(x=>x.PinType != PinType.Advertisement).ToList()
});也许你需要
Thread thread = threads.FirstOrDefault();然后我们可以将其简化为
Thread thread = db.Threads
.AsNoTracking()
.Where(x=>x.Name == name)
.Select(x=> new Thread
{
ThreadId = x.ThreadId,
Topics = x.Topics.Where(x=>x.PinType != PinType.Advertisement).ToList()
}).FirstOrDefault();发布于 2016-10-15 08:10:11
这一切都如我所愿。首先,我寻找我需要的线程,在我找到它之后,我删除了其中的一些主题。我想在一个请求中做到这一点,但我认为这也“没问题”。
Thread thread = db.Threads
.AsNoTracking()
.FirstOrDefault(x=>x.Name == name);
thread.Topics = thread.Topics.Where(x => x.PinType != PinType.Advertisement).ToList();https://stackoverflow.com/questions/40053072
复制相似问题