繁体   English   中英

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

[英]LINQ Query comparing Id with an Id in a list inside SingleOrDefault query

我正在尝试使用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 ==集合。 我想要的是从与o.Option.Id匹配的sp.Options中选择选项。 我怎样才能做到这一点?

更新:我应该提到的一件事是sp.Options是与Option类不同的类。 sp.Options是SPOptions类,因此无法在contains方法内传递它。

使用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元素中的字段。

看一下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));

根据您的问题,您似乎希望这两个选项集具有单个匹配项,对吗? 如果是这样,我建议您将其编写为:

var po = repository.Context.AsQueryable()。Where(o => sp.Options.Any(item => item.id == o.Option.Id))。SingleOrDefault();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM