在编写sql server查询时,如何编写与Linq .Any()类似的东西

时间:2014-07-17 15:20:02

标签: sql sql-server linq entity-framework stored-procedures

我在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吗? 感谢

2 个答案:

答案 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)