#c# #linq
#c# #linq
Вопрос:
Следующий код берет коллекцию класса C и создает коллекцию, состоящую из значений двух свойств A и B. A и B помещаются в одну и ту же коллекцию:
class A
{
public int x { get; set; }
}
class B
{
public int x { get; set; }
}
class C
{
public A A { get; set; }
public B B { get; set; }
}
..........
var items = new List<C>()
{
new C()
{
A = new A() {x = 1},
B = new B() {x = 2}
},
new C()
{
A = new A() {x = 3},
B = new B() {x = 4}
},
};
var qA = from item in items
select (object)item.A;
var qB = from item in items
select (object)item.B;
var qAll = qA.Concat(qB);
Возможно ли это сделать с помощью одного запроса?
Комментарии:
1. является
items
IList<C>
ли ? почему вы приводитеitem.A
иitem.B
кobject
?2. Yes. items — это IList<C> . Теперь я обновил код. Я добавляю A и B в object, поэтому я могу поместить их в одну коллекцию. Реальный код этого не делает, я использую интерфейс, от которого наследуют как A, так и B, но это не важно. Код в вопросе предназначен только для демонстрации идеи.
Ответ №1:
Если вы действительно хотите сгладить подобные свойства, вы можете передать массивы в SelectMany():
var qAll = items.SelectMany(item => new object[] { item.A, item.B });
Ответ №2:
Вы могли бы использовать ForEach:
var qAll = new List<object>();
items.ForEach(item => { qAll.Add(item.A); qAll.Add(item.B) });
Комментарии:
1. @Мистер Разочарование, я думаю. Извините за разочарование. Просто пытаюсь выполнить один запрос запроса.