Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在编写sql server查询时编写类似于Linq.Any()的内容_Sql_Sql Server_Linq_Entity Framework_Stored Procedures - Fatal编程技术网

如何在编写sql server查询时编写类似于Linq.Any()的内容

如何在编写sql server查询时编写类似于Linq.Any()的内容,sql,sql-server,linq,entity-framework,stored-procedures,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) &

我的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.
}
目前,我希望在SQLServer2008存储过程中执行相同的查询。但是我不能写任何类似的东西。那么,有谁能建议我如何编写与.Any等价的sql? 谢谢

将是你能到达的最接近的地方。有吗

范例

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

很多猜测都有关系键,哪个表确实有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)

EXISTS子句可能是最接近您所能理解的东西。即使它们也经常使用其他方法来执行此join/left join子句(例如,顺便说一句),在不知道1的情况下重写此查询也是相当困难的。你的桌子结构2。relatedresourcesID2和其他变量中的内容,例如.relatedresourcesID2是一个ID数组,而stringcustomerid是CustomerID的字符串表示形式。另一个疑问是:在relatedresourcesID2.Containsa.IT360ID.Value中,您确定有一个.IT360ID,不是a2?但当我尝试在存储过程中写入某些内容时,例如t.Tag=Tag和r.RESOURCENAME=Name且存在……,sql server management studio会引发一个错误,即在一个上下文中指定了一个非布尔类型的表达式,其中有一个条件。。。。,那么,除了其他条件之外,不知道如何写EXSTST吗?@RaphaëlAlthaus这至少可以说是一种讽刺:谢谢。