J'ai une table qui contient des codes de procédure parmi d'autres données (appelons-la "MyData"). J'ai une autre table qui contient des codes de procédure valides, leurs descriptions et les dates auxquelles ces codes sont valides. Chaque fois que je veux faire rapport sur MyData et inclure la description de la procédure, je dois faire une recherche similaire à ceci:Comment ajouter des colonnes personnalisées à une table que LINQ to SQL peut traduire en SQL
From m in dc.MyDatas _
Join p in dc.Procedures On m.proc_code Equals p.proc_code _
Where p.start_date <= m.event_date _
And If(p.end_date.HasValue, p.end_date.Value, Now) >= m.event_date _
Select m.proc_code, p.proc_desc
Comme il y a beaucoup d'endroits où je veux montrer la description de la procédure, cela devient malpropre. Je voudrais avoir la recherche définie dans un seul endroit, donc j'essayé de mettre cela dans une extension de MyData:
Partial Public Class MyData
Public ReadOnly Property ProcedureDescription() As String
Get
Dim dc As New MyDataContext
Return _
(From p in dc.Procedures _
Where p.proc_code = Me.proc_code _
And p.start_date <= Me.event_date _
And If(p.end_date.HasValue, p.end_date.Value, Now) >= Me.event_date _
Select p.proc_desc).SingleOrDefault
End Get
End Property
End Class
qui fonctionne lors de l'affichage des données, mais vous ne pouvez pas l'utiliser dans une requête, car elle ne sait pas comment le transformer en une instruction SQL:
Dim test = _
From x In dc.MyDatas _
Select x.proc_code _
Where x.ProcedureDescription.Contains("test")
erreur: Le membre « MyProject.MyData.ProcedureDescription » n'a pas de traduction pris en charge à SQL. Existe-t-il un moyen de transformer une recherche complexe (c'est-à-dire une jointure non triviale) en quelque chose que SQL peut reconnaître pour que je puisse la définir en un seul endroit et la référencer comme un champ dans MyData ? Jusqu'à présent, la seule chose à laquelle je peux penser est de créer une vue SQL sur MyData qui fait le lien et l'apporte dans mon contexte de données, mais je voudrais essayer d'éviter cela. Toutes les idées seraient les bienvenues. Merci.
Je l'ai fait quelque chose de similaire dans des situations similaires , mais le problème ici est que "MyData" pourrait être énorme, et la partie étroite de la requête viendrait après la conversion à un ensemble de résultats. Encore une réponse valable dans une majorité de situations cependant. – gfrizzle