2009-06-24 4 views
2

J'utilise le DataLoadOptions pour récupérer l'utilisateur qui a modifié un Détails du client,colonnes Sélection dans DataLoadOptions

DataLoadOptions dlo = new DataLoadOptions(); 
dlo.LoadWith<Customer>(c => c.ModifiedBy); 

Cependant, je veux que l'ID de l'utilisateur et FirstName et non toutes les colonnes. Existe-t-il un moyen de spécifier les colonnes que vous voulez dans les DataLoadOptions?

Tables:

Customer (ID, FirstName, LastName, Email, ModifiedByUserID etc) 
User (ID, FirstName, LastName, etc) 

Répondre

1

Je ne pense pas qu'il y ait aucune façon de spécifier les colonnes à charger avec DataLoadOptions.

Il existe une méthode DataLoadOptions.AssociateWith qui vous permet de limiter la quantité de données récupérées, mais en termes d'enregistrements. Si cela était possible, le système devait en quelque sorte savoir qu'un enregistrement n'était chargé que d'un nombre spécifié de colonnes. Lorsque les colonnes non chargées seront demandées dans le futur, Linq devra extraire uniquement ces colonnes de la base de données. Je ne pense pas que Linq soit capable de ça.

1

Vous ne pouvez pas le spécifier par programme de la façon dont vous l'avez formulé, mais vous pouvez certainement le faire - si votre objectif est de minimiser les colonnes retournées.

DataLoadOptions

options.LoadWith<OrderInfo>(OrderInfo => OrderInfo.SourceSystemOrderDetails); 
options.LoadWith<OrderInfo>(OrderInfo => OrderInfo.Packages); 

Recherche

var orders = context.OrderInfo.Select(x => new 
       { 

        ID = x.SourceSystemOrderDetails.OrderId, 
        Name = x.SourceSystemOrderDetails.Name, 
        PackageCount = x.Packages.Count() 

       }).ToArray(); 

Cela vous donnera un objet anonyme. Dans la base de données, il ne retournera que les colonnes spécifiées. Vous pouvez également créer votre objet métier ici si vous le souhaitez.

Questions connexes