Отправить новый список на результат запроса LINQ из списка для C # - PullRequest
0 голосов
/ 06 ноября 2018

Я создаю общий список из созданного мною класса и ввожу необходимые данные.

    public class GroupList
    {
        public int pertt { get; set; }
        public int pips { get; set; }
        public int[] iVals;

        public GroupList(int PerTT , int Pips , int[] iValues)
        {
            this.pertt = PerTT;
            this.pips = Pips;
            iVals = iValues;
        }

        public override string ToString()
        {
            return $"PerTT: {pertt} Pips: {pips} Values: {string.Join(", ", iVals)}";
        }
    }

Я хочу ввести свои данные в мой список mydatalist, полученный из этого класса, и отправить запрос LINQ в общий список Mylinqresult, распечатать его правильно и выполнить математические операции.

static void Main(string[] args)
{
    List<GroupList> myDataList = new List<GroupList>
    {
        new GroupList(15, 65, new[] {3, 9, 21, 1, 56}),
        new GroupList(15, 65, new[] {13, 19, 121, 11, 156}),
        new GroupList(10, 19, new[] {23, 29, 221, 12, 562}),
        new GroupList(10, 21, new[] {33, 93, 213, 13, 356}),
        new GroupList(21, 9, new[] {43, 49, 421, 41, 456}),
        new GroupList(21, 19, new[] {35, 95, 216, 17, 56})
    };

    List<GroupList> myLinqResult = new List<GroupList>();
    myLinqResult = from x in myDataList
                   where x.iVals[] >  65
                   select x;
}

Я получаю ошибку компиляции, когда набираю запрос таким образом.

Запрос может быть запрошен на основе параметров, указанных в массиве Int32, и к нему можно получить доступ, отправив результаты в тот же список форматов для печати и выполнения математических операций с данными.

1 Ответ

0 голосов
/ 06 ноября 2018

Если вы хотите выбрать все GroupList объекты, у которых есть элемент в их массиве старше 65, вы можете сделать:

List<GroupList> myLinqResult = myDataList
    .Where(item => item.iVals.Any(i => i > 65))
    .ToList();

В противном случае, если вы пытаетесь выбрать все предметы старше 65 лет (независимо от того, к какому GroupList они принадлежат), вы можете сделать:

List<int> allItemsOver65 = myDataList
    .SelectMany(item => item.iVals)
    .Where(i => i > 65)
    .ToList();

И, наконец, если вы хотите выбрать новые GroupList элементы, которые соответствуют оригиналам, но содержат только элементы в своих iVal массивах, превышающих 65, вы можете сделать что-то вроде:

List<GroupList> myLinqResult = myDataList
    .Where(item => item.iVals.Any(i => i > 65))
    .Select(item => 
        new GroupList(item.pertt, item.pips, item.iVals.Where(i => i > 65).ToArray()))
    .ToList();
...