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