エンティティが与えられた場合:
[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'のVSDebuggingは、次のクエリを示しています。
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'~')
'Distinct'がないことに注意してください。私はこれを検索し、グループ化、匿名型、またはコードでの個別化(つまり、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を取得するための最良の方法を理解することに興味があります。