C# 选择使用LINQ的位置
您好,我正在尝试在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
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