簡體   English   中英

使用LINQ選擇IN的位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM