C# 选择使用LINQ的位置

C# 选择使用LINQ的位置,c#,linq,C#,Linq,您好,我正在尝试在LINQ的条件下使用 我有以下疑问: select * from unitphotos Where MarketingFileTypeID = 2 AND UnitTypeID in (Select UnitTypeID from unitTypes Where PropertyID = 1) 我想我不能只在一个LINQ查询中完成它,所以我做了以下工作: var listUnitTypes = (from ut in db.unittypes

您好,我正在尝试在LINQ的条件下使用

我有以下疑问:

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'转换为'unonymous type int UnitTypeID'

有人知道我做错了什么吗

谢谢

我想这应该行得通。我没有试过,因为我没有db,尽管如此


此外,如果您在此处放置了匿名类型,而不是
选择新的{ut.UnitTypeID}
,则您的应用程序应该可以运行

 var listUnitTypes = (from ut in db.unittypes where ut.PropertyID == propertyID select new { ut.UnitTypeID }).ToList();
然后尝试在Linq to实体中使用它:

        var getPropertyPhotos = (from up in db.unitphotos
                                 where listUnitTypes.Contains(up.UnitTypeID)
                                 select up).ToList();
看起来Linq-to-Entity不知道该类型是什么

所以你可以替换

 select new { 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使用Sql创建复杂的查询,该查询应该能够处理您的问题。

我认为,您解决问题的方法是强制子选择,最终会让您返回到数据库,而不是必须返回到数据库。我现在没有可用的IDE来生成正确的Linq语法,但是为什么不将您的方法从考虑SQL子选择改为考虑联接?以下是我将从SQL开始,然后将其转换为LINQ:

SELECT p.*
FROM unitphotos p
  INNER JOIN unitTypes u
    ON u.UnitTypeID = p.UnitTypeID
        AND u.PropertyID = 1
WHERE p.MarketingFileTypeID = 2

您的输入是什么?
UnitTypeID
是以字符串还是数字的形式存储的?我建议您阅读有关方法的信息。关系设置是否正确?如果正确,您应该能够进行连接。
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();
SELECT p.*
FROM unitphotos p
  INNER JOIN unitTypes u
    ON u.UnitTypeID = p.UnitTypeID
        AND u.PropertyID = 1
WHERE p.MarketingFileTypeID = 2