LINQ查询将Id与SingleOrDefault查询中列表中的Id进行比较

本文关键字:Id 查询 比较 SingleOrDefault LINQ 列表 | 更新日期: 2023-09-27 18:00:35

我正在尝试使用SingleOrDefault Linq to SQL方法获取一个选项。

 var po = repository.Context.AsQueryable<Option>().SingleOrDefault(o => o.Option.Id == sp.Options // sp.Options is a collection);

问题是,在SingleOrDefault方法中,我正在比较p.Option.Id==集合。我想要的是从sp中选择与o.option.Id匹配的选项。我该怎么做?

更新:有一件事我应该提到,sp.Options是一个不同于Option类的类。sp.Options是SPOptions类,所以我不能在contains方法中传递它。

LINQ查询将Id与SingleOrDefault查询中列表中的Id进行比较

看看Contains。

repository.Context.AsQueryable<Option>().SingleOrDefault(o => sp.Options.Contains(o.Option.Id));

如果Options不是Option类的集合。Id,您可以使用Any方法,其中包含您的比较逻辑,如下所示:

repository.Context.AsQueryable<Option>().SingleOrDefault(o => sp.Options.Any(opts => opts.Something == o.Option.Id));

使用Contains (sp.Options.Contains(o.Option.Id))搜索,如:

var po = repository.Context.AsQueryable<Option>()
                    .SingleOrDefault(o => sp.Options.Contains(o.Option.Id));

如果sp.Options的成员与Id不同,则可以执行以下操作:

var po = repository.Context.AsQueryable<Option>()
                    .SingleOrDefault(o => sp.Options.Any(r=> r.Id == o.Option.Id));

var po = repository.Context.AsQueryable<Option>()
                    .SingleOrDefault(o => sp.Options.Select(r=> r.Id).Contains(o.Option.Id));

假设Idsp.Options元素中要与之进行比较的字段

根据您的问题,您似乎希望这两个选项集之间有一个匹配,对吗?如果是这样的话,我建议你把它写成:

var po=存储库。上下文AsQueryable()。其中(o=>sp.Options.Any(item=>item.id==o.Option.id)).SingleOrDefault();