给定实体:
[Table("Clients")]
public class Client
{
[Column("txtClientId")]
public string ClientId { get; set; }
[Column("OrganizationName")]
public string ClientName { get; set; }
}
和 LINQ 查询:
var clients = (from c in database.Clients
where c.ClientId.Contains(term) || c.ClientName.Contains(term)
select c).Distinct();
'clients' 的 VS 调试显示以下查询:
SELECT
[Extent1].[txtClientId] AS [txtClientId],
[Extent1].[OrganizationName] AS [OrganizationName]
FROM [dbo].[Clients] AS [Extent1]
WHERE ([Extent1].[txtClientId] LIKE @p__linq__0 ESCAPE N'~') OR
([Extent1].[OrganizationName] LIKE @p__linq__1 ESCAPE N'~')
请注意,没有“不同”。我对此进行了搜索,发现了一些解决方法,例如分组、匿名类型或在代码中执行不同的操作(即 ToList().Distinct()),但理想情况下,我想要 SQL:
SELECT DISTINCT
[Extent1].[txtClientId] AS [txtClientId],
[Extent1].[OrganizationName] AS [OrganizationName]
FROM [dbo].[Clients] AS [Extent1]
WHERE ([Extent1].[txtClientId] LIKE @p__linq__0 ESCAPE N'~') OR
([Extent1].[OrganizationName] LIKE @p__linq__1 ESCAPE N'~')
我已经尝试使用标记为“[Key]”的“ClientId”,但行为没有变化。
为什么这没有生成我期望的查询,我该如何让它这样做?由于我有解决方法,我更感兴趣的是了解我在这里缺少什么以及获得所需 SQL 的最佳方法。