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方法中传递它。
看看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));
假设Id
是sp.Options
元素中要与之进行比较的字段
根据您的问题,您似乎希望这两个选项集之间有一个匹配,对吗?如果是这样的话,我建议你把它写成:
var po=存储库。上下文AsQueryable()。其中(o=>sp.Options.Any(item=>item.id==o.Option.id)).SingleOrDefault();