Создать новый массив моделей в списке <T>, содержащий значения в каждых четырех индексах - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно добавить новый массив, содержащий значения модели, в список, в котором используются значения, представленные в группах из четырех индексов.

Я использую приведенный ниже код для извлечения значений из соответствующей таблицы базы данных:

public List<Log> ViewItFilterUseCount()
{
    var ndtms2Utils = new NDTMS2UtilsEntities();

    var valueQuery = (from log in ndtms2Utils.Logs
        where log.Message.Contains("ViewIt - View Data")
        select log);

    List<Log> logList = new List<Log>();

    foreach (var value in valueQuery)
    {
        Log model = new Log();
        model.Id = value.Id;
        model.Date = value.Date;
        model.Thread = value.Thread;
        model.Level = value.Level;
        model.Logger = value.Logger;
        model.Message = value.Message;
        model.Exception = value.Exception;
        logList.Add(model);
    }

    return logList;
}

Мне нужно извлечь значения из переменной Message, которые появляются после символа:, и использовать их для создания нового значения для поля Message в следующем формате: ViewIt - Просмотр данных - пользователь выбрал: messageValue1, messageValue2, messageValue3 , messageValue4.

Значение для оставшихся переменных в модели можно заполнить, используя те, которые присутствуют в последнем индексе группы 4.

Данные в табличном формате выглядят так:

enter image description here

Сообщение, добавленное с использованием первых четырех строк в качестве примера, будет иметь следующий вид:

ViewIt - Просмотр данных - пользователь выбрал: Клиенты на лечении, Опиат, Восточная Англия, Эссекс.

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

как я понял, вы пытаетесь связать разобранную строку в объект модели.этот пример вы можете запустить в Linqpad (надеюсь, это поможет)

void Main()
{

    List<string> l = new List<string>()
    {
        "ViewIt - View Data - selected Key is: client1",
        "ViewIt - View Data - selected Substance is: vodka",
        "ViewIt - View Data - selected Region is: Russia",
        "ViewIt - View Data - selected Area is: Moscow",

        "ViewIt - View Data - selected Key is: client2",
        "ViewIt - View Data - selected Substance is: Essex",
        "ViewIt - View Data - selected Region is: England",
        "ViewIt - View Data - selected Area is: Essex",

        "ViewIt - View Data - selected Key is: client3",
        "ViewIt - View Data - selected Substance is: IceTea",
        "ViewIt - View Data - selected Region is: US",
        "ViewIt - View Data - selected Area is: New York"
    };
    List<DATA> datalist = new List<UserQuery.DATA>();
    l.Where(w=> w.Contains("View Data")).Select((v, i) => new { Index = i, Value = v })
        .GroupBy(x => x.Index / 4)
        .ToList().ForEach(r => {
                datalist.Add(parseStrings(r.Select(v=>v.Value).ToList()));
        });

    Console.Write(datalist);
}


public DATA parseStrings(List<string> list){

    DATA d = new DATA();

    list.ForEach(f => {
        var row = f.Substring(f.IndexOf("selected") + 9)
        .Split(':');

        switch (row[0].TrimEnd(" is".ToCharArray()).ToLower())
        {
            case "key":
                d.Key = row[1].ToString().TrimStart(' ');
                break;
            case "substance":
                d.Substance = row[1].ToString().TrimStart(' ');
                break;
            case "region":
                d.Region = row[1].ToString().TrimStart(' ');
                break;
            case "area":
                d.Area = row[1].ToString().TrimStart(' ');
                break;
            default:
                break;
        }
    });


    return d;
}

public class DATA{

    public string Key {get;set;}
    public string Substance {get;set;}
    public string Region {get;set;}
    public string Area {get;set;}
    public DATA(){}
}
0 голосов
/ 13 июня 2019

Удалось заставить его работать, преобразовав вывод из базы данных в массив, а затем используя код массива Rhaokiels для выполнения обработки, как показано ниже:

public List<Log> ViewItFilterUseCount()
        {
            var ndtms2Utils = new NDTMS2UtilsEntities();

            var logQuery = (from logs in ndtms2Utils.Logs
                where logs.Message.Contains("ViewIt - View Data")
                select logs).ToArray();

            int index = 0;
            return (from log in logQuery
                where log.Message.StartsWith("ViewIt - View Data")
                group log by (index++ / 4) into grp
                let log = grp.Last()
                select new Log
                {
                    Id = log.Id,
                    Date = log.Date,
                    Thread = log.Thread,
                    Level = log.Level,
                    Logger = log.Logger,
                    Message = "ViewIt - View Data - the user has selected: " + string.Join(", ", grp.Select((l) => l.Message.Substring(l.Message.IndexOf(": ") + 2))),
                    Exception = log.Exception
                }).ToList();
        }
0 голосов
/ 12 июня 2019

Это сгруппирует записи журнала только по 4 за раз и выдаст объединенное сообщение как вывод:

public List<Log> ViewItFilterUseCount()
{
    var ndtms2Utils = new NDTMS2UtilsEntities();

    // Query LINQ-to-Entities database for all matching rows
    var valueQuery = ndtms2Utils.Logs.Where((o) => o.Message.StartsWith("ViewIt - View Data")).ToList();

    // Then process client-side
    int index = 0;
    return (from log in valueQuery
            group log by (index++ / 4) into grp
            let log = grp.Last()
            select new Log {
                Id = log.Id,
                Date = log.Date,
                Thread = log.Thread,
                Level = log.Level,
                Logger = log.Logger,
                Message = "ViewIt - View Data - the user has selected: " + string.Join(", ", grp.Select((l) => l.Message.Substring(l.Message.IndexOf(": ") + 2))),
                Exception = log.Exception
            }).ToList();
}

Это может произойти сбой, если порядок входящих записей в журнале будет немного изменен или запись пропущена, что приведет к смещению оставшихся записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...