Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询将Id与SingleOrDefault查询内列表中的Id进行比较_C#_Linq - Fatal编程技术网

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

C# LINQ查询将Id与SingleOrDefault查询内列表中的Id进行比较,c#,linq,C#,Linq,我正在尝试使用SingleOrDefault Linq to SQL方法获取一个选项 var po = repository.Context.AsQueryable<Option>().SingleOrDefault(o => o.Option.Id == sp.Options // sp.Options is a collection); var po=repository.Context.AsQueryable().SingleOrDefault(o=>o.Option

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

 var po = repository.Context.AsQueryable<Option>().SingleOrDefault(o => o.Option.Id == sp.Options // sp.Options is a collection);
var po=repository.Context.AsQueryable().SingleOrDefault(o=>o.Option.Id==sp.Options//sp.Options是一个集合);
问题在于,在SingleOrDefault方法中,我比较的是p.Option.Id==一个集合。我想要的是从sp.Options中选择与o.option.Id匹配的选项。我该怎么做

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

使用
(sp.Options.contains(o.Option.Id))
进行搜索,如:

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

var po=repository.Context.AsQueryable()
.SingleOrDefault(o=>sp.Options.Select(r=>r.Id).Contains(o.Option.Id));
假设
Id
sp.Options
元素中要比较的字段

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

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

var po=repository.Context.AsQueryable()
.SingleOrDefault(o=>sp.Options.Select(r=>r.Id).Contains(o.Option.Id));
假设
Id
sp.Options
元素中要比较的字段

看一看

repository.Context.AsQueryable().SingleOrDefault(o=>sp.Options.Contains(o.Option.Id));
如果Options不是Option.Id类的集合,则可以使用包含比较逻辑的方法,如下所示:

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

repository.Context.AsQueryable().SingleOrDefault(o=>sp.Options.Contains(o.Option.Id));
如果Options不是Option.Id类的集合,则可以使用包含比较逻辑的方法,如下所示:

repository.Context.AsQueryable<Option>().SingleOrDefault(o => sp.Options.Any(opts => opts.Something == o.Option.Id));
repository.Context.AsQueryable().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()

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


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

我应该提到的一点是,sp.Options与Option类是不同的类。sp.Options是SPOptions类,因此我无法在contains方法中传递它。我应该提到的一点是sp.Options与Option类是不同的类。sp.Options是SPOptions类,因此我无法在contains方法中传递它。
repository.Context.AsQueryable<Option>().SingleOrDefault(o => sp.Options.Any(opts => opts.Something == o.Option.Id));