我正在尝试使用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方法中传递它。
答案 0 :(得分:4)
使用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
元素中的字段。
答案 1 :(得分:4)
看看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));
答案 2 :(得分:0)
基于你的问题,似乎你期望这两个选项集之间只有一个匹配,对吗? 如果是这样,我建议你把它写成:
var po = repository.Context.AsQueryable()。Where(o =&gt; sp.Options.Any(item =&gt; item.id == o.Option.Id))。SingleOrDefault();