簡體   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