我在asp.net mvc web应用程序中有以下linq查询: -
Public IQuerable<Technologies> Search (int? isManaged , bool PrimaryCustomerOnly, int?customerID )
{
var technology2 = ITSys.Technologies
.Where(a => (
( !isManaged.HasValue||a.IsManaged == isManaged)
&&
(!PrimaryCustomerOnly && a.ITSysFirewall.FirewallCustomers.Any(a2 => customerID.HasValue && a2.CustomerName.ToLower() == stringcustomerid && relatedresourcesID2.Contains(a.IT360ID.Value)))
));
//code goes here.
}
目前我想在sql server 2008存储过程中执行相同的查询。但是我无法写出与.Any()相似的东西。那么有人可以建议我如何写一个等效于.Any()的SQL吗? 感谢
答案 0 :(得分:1)
EXISTS
最接近.Any()
示例
SELECT * FROM [TABLE]
WHERE EXISTS (SELECT 1 FROM [TABLE] WHERE NAME IS NOT NULL)
等同于
db.Table.Any(o => o.Name != null);
这个特定的查询会像这样开始,我不知道如何完成它,但它应该指示你应该去哪个方向。
SELECT * FROM Technologies
WHERE EXISTS (SELECT 1 FROM Technologies WHERE (isManaged IS NOT NULL AND isManaged = @MANAGED) AND (PrimaryCustomerOnly == FALSE AND
// DO THE JOINS a.ITSysFirewall.FirewallCustomers.Any(a2 => customerID.HasValue && a2.CustomerName.ToLower() == stringcustomerid && relatedresourcesID2.Contains(a.IT360ID.Value)))
)
答案 1 :(得分:1)
那里有许多猜测(关系的关键,哪个表确实有IT360ID字段,但我会想象这样的事情。
select t.*
from Technologies t
where IsManaged = @IsManaged
and @PrimaryCustomerOnly = 0
and t.IT360ID in (<some elements corresponding to relatedresourcesID2>)-- like ('1', '2', 'adsb')
and exists (select null
from FirewallCustomers fc
where t.Id = fc.PrimaryCustomerOnly_Id
and fc.customerId is not null
and lower(fc.CustomerName) = @stringcustomerid)