Question

Je dois prendre les résultats d'une requête:

 var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;

et préparer comme ICollection pour que je puisse avoir quelque chose comme

 ICollection<SoilSamplingSubJob> subjobs

au moment où je crée une liste qui isnt appropriée à mes besoins:

query.ToList();

Que dois-je faire? - est-il query.ToIcollection ()

Était-ce utile?

La solution

Liste est un ICollection. Vous pouvez vous modifier le code query.ToList () à ce qui suit.

query.ToList() as ICollection<SoilSamplingSubJob>;

sons question Vous aimez cette requête est retournée comme résultat de la fonction. Si tel est le cas rappelez-vous que le Linq à des objets SQL sont reliés par défaut de sorte que vous devrez gérer où s'ouvrir et fermer le contexte de votre base de données. Sinon, vous pouvez créer DTO (objets de transfert de données) qui contiennent les données que vous souhaitez utiliser dans le reste de votre programme. Ces objets peuvent entrer dans votre hiérarchie d'objets comme vous le souhaitez.

Vous pouvez également créer ces DTO dans le cadre de la requête.

var query = from m in db.SoilSamplingSubJobs where m.order_id == id
            select new SubJobDTO {
                OrderNumber = m.order_id
            };
return query.ToList() as ICollection<SubJobDTO>;

Autres conseils

Depuis, la requête met en œuvre IEnumerable, vous pouvez le transmettre au constructeur de la collection de votre choix. ICollection est une interface, mis en œuvre par plusieurs classes (y compris List<T>, qui renvoie ToList) avec différentes caractéristiques de performance.

Avec la syntaxe légèrement différente, vous pouvez faire quelque chose comme ça et qui peut réduire ce qui se passe dans le ICollection. Ce type d'approche est idéal pour angulaire et MVC quand vous avez une grande table mais ne souhaitez que de charger des accessoires dans la page cshtml:

ICollection<SoilSamplingSubJob> samples = dbContext.GetQuery().Where(m => m.order_id == id)
.AsEnumerable().Select(s => new
            {
                Id = s.order_id,
                CustomProperty = s.some_thing
            }).ToList() as ICollection<SoilSamplingSubJob>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top