web-dev-qa-db-fra.com

Sélectionnez toutes les colonnes d'un objet avec Linq

J'ai une question:

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select new { t.CommissionPercent, t.SellingPrice };

Mais en réalité, je dois éviter d'utiliser un type anonyme car il est en lecture seule et sélectionner toutes les propriétés/colonnes sur mon élément "transaction".

J'aurais pensé que ce serait quelque chose comme ça:

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select t.SellingPrice, t.CommissionPercent, t.Etc...

Ou...

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select t.SellingPrice
                        select t.CommissionPercent
                        select t.Etc...

N'y a-t-il aucun moyen de récupérer tout ce que l'objet possède pour les propriétés et de le transmettre à l'Ienumerable?

18
Isaiah Nelson

Si vous souhaitez éviter les types anonymes et obtenir tout, pourquoi ne pas simplement renvoyer un IEnumerable de l'élément de transaction d'origine?

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select t;
26
Steve Danner

De plus, s'il y a une condition join entre les objets, nous pouvons obtenir le résultat en utilisant ..

var result = (from t in db.Transactions
                      join te in db.TransactionsEntries 
                             on t.WorkorderID equals te.WorkorderID                         
             select new { t, te }).ToList();
13
Dani Mathew

Je crois que cela fonctionnerait.

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select t;
8
Chris Klepeis

Je pense que tu veux

var transactions = db.Transactions.Where(t => t.SellingPrice != 0).ToList();

ou

var transactions = db.Transactions.Where(t => t.SellingPrice != 0).AsEnumerable();

si vous voulez vraiment juste un IEnumerable

6
deltree

essayer

var transactions = from t in db.Transactions
                    where t.SellingPrice != 0 
                    select t;
4
Yahia

Pour une seule valeur de retour, vous pouvez utiliser:

var transactions = (from t in db.Transactions
                    where t.SellingPrice != 0 
                    select t).FirstOrDefault();  

Pour un retour IEnumerable:

var transactions = (from t in db.Transactions
                    where t.SellingPrice != 0 
                    select t).ToList();  
2
fiberOptics

Pourquoi avez-vous "besoin" d'éviter un type anonyme ici?

Vous disposez des options suivantes:

select t
select new { t.CommissionPercent, t.SellingPrice }; 
select new MyCustomDtoClass { CommissionPercent = t.CommissionPercent, SellingPrice  = t.SellingPrice }; //also ok
select new object[] { t.CommissionPercent, t.SellingPrice }

Le dernier n'est pas pratique à manipuler. Pas question. Dites-nous ce que vous voulez faire.

2
usr
var transactions = (from t in db.Transactions
                        select new
                       {
                           t.SellingPrice,
                           t.CommissionPercent,
                           ...,
                           ...,
                           t.Etc...
                       }).AsEnumerable().Select(x => new HomeModel // Create a model which have following properties
                        {
                           SellingPrice= x.SellingPrice,  //(where SellingPrice is a HomeModel property)
                           AdCategoryTitle = x.CommissionPercent,
                           ...,
                           ...,
                           ETc... = t.Etc...
                       }).ToList();
0
Tauseef Nabiji