2010-09-21 5 views
3

Vu le code suivant:à l'aide de méthodes dans la projection Linq

 var EmployeeXPosition = from emp in context.WTDEmployee 
           from ep in emp.WTDEmployeeXOXPosition 
           select new { 
            EmployeeId = emp.id, 
            FullNameAndPosition = string.Format("{0} {1} : {2}", emp.FirstName, emp.LastName, ep.WTDPosition.Position) 
           }; 

Il donne l'erreur:

LINQ to Entities ne reconnaît pas la méthode « System.String Format (System.String , System.Object, System.Object, System.Object) 'méthode, et cette méthode ne peut pas être traduit dans une expression de magasin.

Effectivement je pouvais faire:

emp.FirstName+" "+ emp.LastName +" : " + ep.WTDPosition.Position 

Mais il semble tout simplement laid, des suggestions sur la façon d'utiliser string.Format à la place?

Répondre

5

En général, je résous cela en créant deux instructions - une dans LinqToEntities (ou ToSql, ou autre) et une autre dans LinqToObjects. Je fais ce que j'ai besoin de faire dans le magasin, puis fais une étape de traitement séparée avec les objets en mémoire. Cela mélange le meilleur des deux mondes.

var EmployeeXPosition = from emp in context.WTDEmployee 
           from ep in emp.WTDEmployeeXOXPosition 
           select new { 
            emp.id, 
            emp.FirstName, 
            emp.LastName, 
            ep.WTDPosition.Position 
           }; 

var result = from item in EmployeeXPosition.ToList() 
      select new 
      { 
       EmployeeId = item.id, 
       FullNameAndPosition = string.Format("{0} {1} : {2}", item.FirstName, item.LastName, item.Position) 
      }; 
1

This codeplex project prétend faire exactement ce que vous voulez. Malheureusement, je n'ai pas le temps de l'essayer maintenant - mais voici ce qu'ils disent

LINQ expression bibliothèque de projection fournit un outil qui permettent d'utiliser expressions lambda dans les projections LINQ (à anonymes et prédéfinis types), même si la L'expression lambda n'est pas définie dans la requête mais est plutôt stockée dans une variable ou extraite via une fonction ou une propriété .

Questions connexes