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

C# 使用Linq选择对象上的所有列,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一个问题: var transactions = from t in db.Transactions where t.SellingPrice != 0 select new { t.CommissionPercent, t.SellingPrice }; 但实际上,我需要避免使用匿名类型,因为它是只读的,并选择事务项上的所有属性/列 我本以为会是这样的: var transactions =

我有一个问题:

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select new { t.CommissionPercent, t.SellingPrice };
但实际上,我需要避免使用匿名类型,因为它是只读的,并选择事务项上的所有属性/列

我本以为会是这样的:

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

没有办法检索对象的所有属性并将其传递给Ienumerable吗?

试试看

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

我相信这会奏效

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

如果要避免匿名类型并获取所有信息,为什么不返回原始事务项的IEnumerable呢

var transactions = from t in db.Transactions
                        where t.SellingPrice != 0 
                        select t;
我想你想要

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


如果您真的只想要一个IEnumerable

,为什么需要在这里避免匿名类型

您有以下选项:

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 }

最后一个不方便处理。没办法。告诉我们您想要做什么。

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

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

此外,如果对象之间存在连接条件,我们可以使用..获得结果

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

您是否尝试过db.Transactions.Wherem=>m.SellingPrice!=0;我经常在选择t时出错。我重新启动了visual studio,它似乎解决了这个问题。奇怪的是,我的问题更大,很难在这里发布,但匿名类型是只读的,我需要能够更新它的属性。好的,然后使用数字3。编写一个具有自动属性的自定义数据传输对象类,R将从匿名类型生成该类-按ctrl-shift-R。你可以更新这些属性。有趣的想法。我会尝试几种不同的方法,看看我可以利用自定义类和“选择t”来做些什么。谢谢你选择t?什么VS在我尝试时给了我一个错误。我必须看一下我的代码,但是由于其他人已经发布了它-它肯定是正确的。@fullNelson由于ToList的原因,这会立即将所有生成的记录加载到内存中!根据数据量的不同,这可能是您想要的数据,也可能不是您想要的数据……我本不打算把ToList放在上面,但他要的是一个IEnumerable。@Yahia这不是一个大的数据集,最终需要1500条记录,我需要编写一个查询来修补一些数据,我想用LINQ来做,而不是用其他方法。感谢您的洞察力。@deltree,我认为AsEnumerable比ToList更适合获取和IEnumerable。我尝试了这个方法,它返回了两个对象的ToString方法,而不是对象的列。我假设我使用Linq来创建对象这一事实没有什么区别?
var transactions = (from t in db.Transactions
                    where t.SellingPrice != 0 
                    select t).ToList();  
var result = (from t in db.Transactions
                      join te in db.TransactionsEntries 
                             on t.WorkorderID equals te.WorkorderID                         
             select new { t, te }).ToList();
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();