首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ select items of List

LINQ select items of List
EN

Stack Overflow用户
提问于 2016-10-15 06:51:20
回答 2查看 42关注 0票数 0

我将首先展示一些代码,然后我将尝试告诉您我想要什么。

代码语言:javascript
复制
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;

基本上,我想我的主题,但我不需要所有的主题,我只需要“不广告”的主题。这对我来说很有效,但我觉得我可以用一个请求来做这件事,但我不知道怎么做。

我试过了,但它不起作用:

代码语言:javascript
复制
Thread thread = db.Threads
            .AsNoTracking()
            .Where(x=>x.Name == name)
            .Select(x=> new Thread
            {
                Topics = x.Topics.Select(x=>x.PinType != PinType.Advertisement)
            });

型号:

代码语言:javascript
复制
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;}
}
EN

回答 2

Stack Overflow用户

发布于 2016-10-15 07:54:10

代码语言:javascript
复制
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。将其更改为:

代码语言:javascript
复制
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()
        });

也许你需要

代码语言:javascript
复制
Thread thread = threads.FirstOrDefault();

然后我们可以将其简化为

代码语言:javascript
复制
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();
票数 0
EN

Stack Overflow用户

发布于 2016-10-15 08:10:11

这一切都如我所愿。首先,我寻找我需要的线程,在我找到它之后,我删除了其中的一些主题。我想在一个请求中做到这一点,但我认为这也“没问题”。

代码语言:javascript
复制
Thread thread = db.Threads
            .AsNoTracking()
            .FirstOrDefault(x=>x.Name == name);

thread.Topics = thread.Topics.Where(x => x.PinType != PinType.Advertisement).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40053072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档