如何在编写sql server查询时编写类似于Linq.Any()的内容
我的asp.net mvc web应用程序中有以下linq查询:-如何在编写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) &
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这至少可以说是一种讽刺:谢谢。