Выделить все столбцы объекта с помощью Linq
У меня есть запрос:
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...
Или...
var transactions = from t in db.Transactions
where t.SellingPrice != 0
select t.SellingPrice
select t.CommissionPercent
select t.Etc...
Невозможно получить все объекты, которые объект имеет для свойств, и передать их в Ienumerable?
Ответы
Ответ 1
Если вы хотите избежать анонимных типов и получить все, почему бы просто не вернуть IEnumerable
из исходной позиции транзакции?
var transactions = from t in db.Transactions
where t.SellingPrice != 0
select t;
Ответ 2
Кроме того, если между объектами есть условие соединения, мы можем получить результат с помощью..
var result = (from t in db.Transactions
join te in db.TransactionsEntries
on t.WorkorderID equals te.WorkorderID
select new { t, te }).ToList();
Ответ 3
Я считаю, что это сработает.
var transactions = from t in db.Transactions
where t.SellingPrice != 0
select t;
Ответ 4
Я думаю, ты хочешь
var transactions = db.Transactions.Where(t => t.SellingPrice != 0).ToList();
или
var transactions = db.Transactions.Where(t => t.SellingPrice != 0).AsEnumerable();
если вы действительно просто хотите IEnumerable
Ответ 5
пытаться
var transactions = from t in db.Transactions
where t.SellingPrice != 0
select t;
Ответ 6
Почему вам "нужно", чтобы избежать анонимного типа здесь?
У вас есть следующие варианты:
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 }
Последнее неудобно обрабатывать. Ни в коем случае. Скажите нам, что вы хотите сделать.
Ответ 7
Для одного возвращаемого значения вы можете использовать:
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();
Ответ 8
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();