首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择一个列表中存在但另一个列表中不存在的ID

如何选择一个列表中存在但另一个列表中不存在的ID
EN

Stack Overflow用户
提问于 2022-02-15 06:05:17
回答 3查看 181关注 0票数 -2

我有两个这样的模特:

代码语言:javascript
运行
复制
public class Process
{
        public int Id { get; set; }
        public int PaletID { get; set; }
        public Palet Palet { get; set; }
        public DateTime Start { get; set; }
        public DateTime? End { get; set; }
}

public class Palet
    {
        public int Id { get; set; }     
        public int DeliveryNoteID { get; set; }          
        public DateTime Date { get; set; }
        public string Type { get; set; }
        public int Length { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int? Nrpcs { get; set; }
        public double Volume { get; private set; }                       
        public Status Status { get; set; }        
        public DeliveryNote DeliveryNote { get; set; }        
    }

我需要做的是选择(用于自动完成),这些is存在于Palet中,但在进程中不存在,并且以关键字开头。

我想以这种方式访问数据:

代码语言:javascript
运行
复制
string keyword;
var Data = await _context.Process
                     .Include(p => p.Palet)                  
                     .OrderBy(p => p.PaletID)
                     .Take(dm.Take)
                     .ToListAsync(); 

返回应该是一个int或者更好的对象进程,我该如何做呢?

EN

回答 3

Stack Overflow用户

发布于 2022-02-15 07:07:06

我需要做的是选择(用于自动完成),即在Palet中存在但在进程中不存在的in。

代码语言:javascript
运行
复制
listOfPalet.Select(p => p.Id).Except(listOfProcess.Select(p => p.Id))

请注意,该操作还将删除Palet ID列表。输出只是ID的列表。如果你想要整个Palet对象,让我知道,我会做一个修改

票数 0
EN

Stack Overflow用户

发布于 2022-02-15 07:10:30

听起来像是.GroupJoin()的工作。也许是这样的:

代码语言:javascript
运行
复制
IReadOnlyList<Palet> palets = LoadPalets();
IReadOnlyList<Process> processes = LoadProcesses();

var paletsWithoutProcess = palets
    .GroupJoin(
        processes,
        palet => palet.Id,
        process => process.PaletId,
        (palet, processes) => processes.Any() ? null : palet)
    .Where(palet => palet != null)
    .ToList();
票数 0
EN

Stack Overflow用户

发布于 2022-02-16 06:00:16

谢谢你的暗示。IEnumerable.Except()做到了这一点。最后的解决方案如下所示:

代码语言:javascript
运行
复制
var Data = await _context.Paleta
                    .Select(p => p.Id)
                    .Except(_context.Process.Select(p => p.PaletaID))
                    .Where(p => p.ToString().Contains(keyword))
                    .OrderBy(i=>i)
                    .Take(20)
                    .ToListAsync();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71121756

复制
相关文章

相似问题

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