繁体   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