[英]linq nested select in Contains method
可以將其轉換為單個LINQ語句嗎?
SELECT COUNT(*)
FROM Abstract_Dedications_Lookup
WHERE PlatEntryNumber = 10383772
AND CommonArea = 0
AND ((OuterType <> '' AND OuterValue <> '') OR (InnerType <> '' AND InnerValue <> ''))
AND ParcelNumber IN
(SELECT ParentParcelNumber
FROM Parcel_Title_History
WHERE EntryNumber <> 10383772
AND ParentParcelNumber <> '0'
AND ChildParcelNumber <> ParentParcelNumber)
我嘗試了許多變體,但無法在“ .Contains”方法中獲得正確的語法。 可以在“包含”中使用“選擇”嗎?
var query2 = from d in context.RTV_ParcelDedicationLocations
from p in context.RTV_ParcelTitleHistory
where d.PlatEntryNumber == PlatEntryNum
where d.CommonArea == false
where (d.OuterType != "" && d.OuterValue != "") || (d.InnerType != "" && d.InnerValue != "")
where d.ParcelNumber.Contains(p.ChildParcelNumber != p.ParentParcelNumber)
select d;
var results2 = query2.ToList();
您可以創建單獨的linq語句,該語句將由數據庫作為1個查詢執行。 linq語句主體實際上會執行,直到您開始對其進行迭代為止。
我想到此問題的方式是定義一個查詢,該查詢從Parcel_Title_History獲取有效的ParentParcelNumber。 然后創建另一個查詢,以檢查Abstract_Dedications_Lookup中的項目是否在第一個查詢中。 嘗試這樣的事情:
var query1 = from p in context.RTV_ParcelTitleHistory
where p.EntryNumber != 10383772 & p.ParentParcelNumber != "0" & p.ChildParcelNumber != p.ParentParcelNumber
select p.ParentParcelNumber;
var query2 = from d in context.RTV_ParcelDedicationLocations
where d.PlatEntryNumber == 10383772
& d.CommonArea == 0
& ((d.OuterType != "" && d.OuterValue != "") || (d.InnerType != "" && d.InnerValue != ""))
& query1.Contains(d.ParcelNumber)
select d;
var results2 = query2.ToList();
下面的LINQ生成的SQL語句返回44,092條記錄,但應與OP中返回182條記錄的SQL相同。 query2 LINQ中的某些內容顯然不正確:
SELECT
[Extent1].[ParcelNumber] AS [ParcelNumber],
[Extent1].[PlatEntryNumber] AS [PlatEntryNumber],
[Extent1].[OuterType] AS [OuterType],
[Extent1].[OuterValue] AS [OuterValue],
[Extent1].[InnerType] AS [InnerType],
[Extent1].[InnerValue] AS [InnerValue],
[Extent1].[CommonArea] AS [CommonArea]
FROM (SELECT
[RTV_ParcelDedicationLocations].[ParcelNumber] AS [ParcelNumber],
[RTV_ParcelDedicationLocations].[PlatEntryNumber] AS [PlatEntryNumber],
[RTV_ParcelDedicationLocations].[OuterType] AS [OuterType],
[RTV_ParcelDedicationLocations].[OuterValue] AS [OuterValue],
[RTV_ParcelDedicationLocations].[InnerType] AS [InnerType],
[RTV_ParcelDedicationLocations].[InnerValue] AS [InnerValue],
[RTV_ParcelDedicationLocations].[CommonArea] AS [CommonArea]
FROM [dbo].[RTV_ParcelDedicationLocations] AS [RTV_ParcelDedicationLocations]) AS [Extent1]
WHERE (([Extent1].[PlatEntryNumber] = 10383772) AND (10383772 IS NOT NULL)
AND (0 = [Extent1].[CommonArea]) AND ('''' <> [Extent1].[OuterType]) AND ('''' <> [Extent1].[OuterValue]))
OR (('''' <> [Extent1].[InnerType]) AND ('''' <> [Extent1].[InnerValue])
AND ( EXISTS (SELECT 1 AS [C1]
FROM (SELECT [RTV_ParcelTitleHistory].[EntryNumber] AS [EntryNumber],
[RTV_ParcelTitleHistory].[ParentParcelNumber] AS [ParentParcelNumber],
[RTV_ParcelTitleHistory].[ChildParcelNumber] AS [ChildParcelNumber],
[RTV_ParcelTitleHistory].[Book] AS [Book],
[RTV_ParcelTitleHistory].[Page] AS [Page]
FROM [dbo].[RTV_ParcelTitleHistory] AS [RTV_ParcelTitleHistory]) AS [Extent2]
WHERE ( NOT (([Extent2].[EntryNumber] = 10383772) AND (10383772 IS NOT NULL))) AND ('0' <> [Extent2].[ParentParcelNumber]) AND ([Extent2].[ChildParcelNumber] <> [Extent2].[ParentParcelNumber]) AND ([Extent2].[ParentParcelNumber] = [Extent1].[ParcelNumber])
)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.