我的 asp.net MVC web 应用程序中有以下代码:
var currentport = tms.TMSSwitchPorts
.Where(a => a.SwitchID == fromID)
.Select(a2 => a2.PortNumber)
.ToList();
if (currentport.Any(tms.TMSSwitchPorts
.Where(a => a.SwitchID == toID)
.Select(a => a.PortNumber)
.ToList()
)
)
{
// do something
}
但我无法以这种方式使用 .Any()
,尽管我在两个列表中都选择了 PortNumber 字段?
谁能给个建议?
最佳答案
您可以使用简单的 Join
在数据库中高效且完整地完成此操作:
var match = tms.TMSSwitchPorts.Where(a => a.SwitchID == fromID)
.Join(tms.TMSSwitchPorts.Where(a => a.SwitchID == toID),
(a) => a.PortNumber,
(b) => b.PortNumber,
(a, b) => true).Any();
if (match) { ... }
生成的 SQL 应该是这样的
SELECT
(CASE
WHEN EXISTS(
SELECT NULL AS [EMPTY]
FROM [TMSSwitchPorts] AS [t0]
INNER JOIN [TMSSwitchPorts] AS [t1] ON [t0].[PortNumber] = [t1].[PortNumber]
WHERE ([t0].[SwitchID] = @p0) AND ([t1].[SwitchID] = @p1)
) THEN 1
ELSE 0
END) AS [value]
所以你没有任何数据期望单个 1
或 0
通过网络移动,您不必弄乱您的应用程序内存。
代码
if (currentport.Any(tms.TMSSwitchPorts
.Where(a => a.SwitchID == toID)
.Select(a => a.PortNumber)
.ToList()
)
不会工作因为Any
需要一个 Func<T, bool>
形式的谓词, 但你传递给它一个 List<Int>
(假设 PortNumber
是一个 int
)。
关于c# - 如何在两个 ienumerables 之间使用 Any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23806210/