[英]Select where IN using LINQ
您好我正在嘗試在LINQ中使用IN條件。
我有以下查詢:
select * from unitphotos Where MarketingFileTypeID = 2
AND UnitTypeID in (Select UnitTypeID from unitTypes Where PropertyID = 1)
我想我無法僅在一個LINQ查詢中做到這一點,所以我做到了:
var listUnitTypes = (from ut in db.unittypes
where ut.PropertyID == propertyID
select new { ut.UnitTypeID }).ToList();
var getPropertyPhotos = (from up in db.unitphotos
where listUnitTypes.Contains(up.UnitTypeID)
select up).ToList();
但是,它在Contains(up.UnitTypeID)中給了我一個語法錯誤:“參數1:無法從'int'轉換為'anonymous type int UnitTypeID'
有人知道我在做什么錯嗎?
謝謝
var getPropertyPhotos = (from up in db.unitphotos
where unittypes.Any(ut => ut.PropertyID == propertyID && ut.UnitTypeId == up.UnitTypeID)
select up).ToList();
我認為這應該有效。 還沒嘗試過,因為我沒有ymmv的數據庫。
另外,如果您只是select ut.UnitTypeID
而不是select new { ut.UnitTypeID }
,則您的應該可以使用
您在這里輸入匿名
var listUnitTypes = (from ut in db.unittypes where ut.PropertyID == propertyID select new { ut.UnitTypeID }).ToList();
然后嘗試在Linq To Entity中使用它:
var getPropertyPhotos = (from up in db.unitphotos
where listUnitTypes.Contains(up.UnitTypeID)
select up).ToList();
似乎Linq to Entity不會知道該類型是什么。
所以你可以更換
select new { ut.UnitTypeID })
同
select { ut.UnitTypeID })
如@anakic悲傷之前
然后通過Linq創建1個查詢
var listUnitTypes = (from ut in db.unittypes where ut.PropertyID == propertyID select ut.UnitTypeID);
var getPropertyPhotos = (from up in db.unitphotos where listUnitTypes.Contains(up.UnitTypeID) select up).ToList();
這樣,您可以強制Linq to Sql創建應該能夠處理您的問題的復雜查詢。
我認為,解決子查詢強制問題的方法最終將使您比必須要返回數據庫更多。 我現在沒有可用的IDE來敲出正確的LINQ語法,但是為什么不將您的方法從考慮SQL子選擇改為使用JOIN呢? 這是我首先要使用的SQL,然后將其轉換為LINQ:
SELECT p.*
FROM unitphotos p
INNER JOIN unitTypes u
ON u.UnitTypeID = p.UnitTypeID
AND u.PropertyID = 1
WHERE p.MarketingFileTypeID = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.