这是我的LINQ (EF):
var ls = from ps in ctx.Package_Services
where
(ps.Package.Policy.Name != "Short-Term Career Policy"
&& ps.Package.Name != "Early Talent Package")
&&
(ps.Package.Policy.Name != "Assignment Policy"
&& ps.Package.Name != "Efficient Package")
select new
{
Service = ps.Service,
PackageService = ps
};这是它生成的相关SQL:
WHERE (N'Early Talent Package' <> [Extent2].[Name])
AND (N'Efficient Package' <> [Extent2].[Name])
AND (N'Short-Term Career Policy' <> [Extent3].[Name])
AND (N'Assignment Policy' <> [Extent4].[Name])我想说的是,“我不想要组合X,我也不想要组合Y;然而,我确实想要”早期人才套餐“,其中他们不受”短期职业政策“的约束。而且,当他们不受”分配政策“的约束时,我也想要”高效套餐“。
我怎么把它翻译成LINQ呢?
发布于 2014-01-18 00:29:11
它可能会消除它们,因为它不需要它们。
你实际上是在说“不是这个”和“不是这个”。
现在,如果中间有一个"OR“,它必须将它们考虑在内:
(ps.Package.Policy.Name != "Short-Term Career Policy"
&& ps.Package.Name != "Early Talent Package")
||
(ps.Package.Policy.Name != "Assignment Policy"
&& ps.Package.Name != "Efficient Package")发布于 2014-01-18 00:50:00
基于你所说的你正在努力实现的目标:
我不想要组合X,我也不想要组合Y;然而,我确实想要“早期人才套餐”,他们不受“短期职业政策”的约束。而且,当它们不与“分配策略”捆绑在一起时,我也想要“高效包”。
我认为你的布尔逻辑在总体上是有缺陷的。
当Early Talent Package未与短期职业政策捆绑时,您想要它
((ps.Package.Policy.Name == "Early Talent Package")
&& (ps.Package.Policy.Name != "Short-Term Career Policy"))或(||)
您希望在未绑定到分配策略时使用Efficient Package
((ps.Package.Name == "Efficient Package")
&& (ps.Package.Policy.Name != "Assignment Policy"))总而言之:
((ps.Package.Policy.Name == "Early Talent Package")
&& (ps.Package.Policy.Name != "Short-Term Career Policy"))
||
((ps.Package.Name == "Efficient Package")
&& (ps.Package.Policy.Name != "Assignment Policy"))发布于 2014-01-18 00:49:04
这就是对我有效的方法。
var ls = from ps in ctx.Package_Services
where
!(
(ps.Package.Policy.Name == "Short-Term Career Policy"
&& ps.Package.Name == "Early Talent Package")
||
(ps.Package.Policy.Name == "Assignment Policy"
&& ps.Package.Name == "Efficient Package")
)
select new
{
Service = ps.Service,
PackageService = ps
};它生成的SQL如下所示:
SELECT
1 AS [C1],
[Extent4].[Id] AS [Id],
[Extent4].[Name] AS [Name],
[Filter1].[Id1] AS [Id1],
[Filter1].[PackageId] AS [PackageId],
[Filter1].[ServiceId] AS [ServiceId],
[Filter1].[SectionId] AS [SectionId],
[Filter1].[Mandatory] AS [Mandatory]
FROM (SELECT [Extent1].[Id] AS [Id1], [Extent1].[PackageId] AS [PackageId], [Extent1].[ServiceId] AS [ServiceId], [Extent1].[SectionId] AS [SectionId], [Extent1].[Mandatory] AS [Mandatory]
FROM [dbo].[Package_Services] AS [Extent1]
INNER JOIN [dbo].[Packages] AS [Extent2] ON [Extent1].[PackageId] = [Extent2].[Id]
INNER JOIN [dbo].[Policy] AS [Extent3] ON [Extent2].[PolicyId] = [Extent3].[Id]
WHERE ( NOT (((N'Short-Term Career Policy' = [Extent3].[Name]) AND (N'Early Talent Package' = [Extent2].[Name])) OR ((N'Assignment Policy' = [Extent3].[Name]) AND (N'Efficient Package' = [Extent2].[Name])))) AND (N'Exception Policy' <> [Extent3].[Name]) ) AS [Filter1]
INNER JOIN [dbo].[Services] AS [Extent4] ON [Filter1].[ServiceId] = [Extent4].[Id]
WHERE N'Transportation' = [Extent4].[Name]https://stackoverflow.com/questions/21190846
复制相似问题