使用Linq选择对象上的所有列

时间:2012-02-01 21:21:28

标签: c# linq linq-to-sql

我有一个问题:

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

但实际上,我需要避免使用匿名类型,因为它只是readonly并选择我的“transaction”项目上的所有属性/列。

我原以为会是这样的:

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

或者...

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

是否无法检索对象对属性的所有内容并将其传递给Ienumerable?

8 个答案:

答案 0 :(得分:25)

如果您想避免使用匿名类型并获取所有内容,为什么不返回原始交易项目的IEnumerable

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

答案 1 :(得分:12)

此外,如果对象之间存在 join 条件,我们可能会使用..

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

答案 2 :(得分:8)

我相信这会奏效。

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

答案 3 :(得分:6)

我想你想要

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

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

如果你真的只想要IEnumerable

答案 4 :(得分:4)

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

答案 5 :(得分:2)

为什么你“需要”避免使用匿名类型?

您有以下选择:

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 }

最后一个不方便处理。没办法解决这个问题。告诉我们你想做什么。

答案 6 :(得分:2)

对于单个返回值,您可以使用:

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

对于IEnumerable返回:

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

答案 7 :(得分:0)

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();