как получить все свойства и значения из универсального параметра - PullRequest
0 голосов
/ 03 июля 2019

Я хочу сравнить весь свой список значений общего свойства T с моей локальной переменной searchText.

Я уже попробовал: x.GetType().GetProperties().All(props => props.GetValue(x).ToString().ToLower().Contains(searchText.ToLower()))

и получил ошибку: NullReferenceException: Object reference not set to an instance of an object.

enter image description here

вот мой полный метод:

protected List<T> ProcessCollection<T>(List<T> lstElements, IFormCollection requestFormData, Func<T, IComparable> getProp)
{
    string searchText = string.Empty;
    Microsoft.Extensions.Primitives.StringValues tempOrder = new[] { "" };
    if (requestFormData.TryGetValue("search[value]", out tempOrder))
    {
        searchText = requestFormData["search[value]"].ToString();
    }
    var skip = Convert.ToInt32(requestFormData["start"].ToString());
    var pageSize = Convert.ToInt32(requestFormData["length"].ToString());
    if (requestFormData.TryGetValue("order[0][column]", out tempOrder))
    {
        var columnIndex = requestFormData["order[0][column]"].ToString();
        var sortDirection = requestFormData["order[0][dir]"].ToString();
        tempOrder = new[] { "" };
        if (requestFormData.TryGetValue($"columns[{columnIndex}][data]", out tempOrder))
        {
            var columName = requestFormData[$"columns[{columnIndex}][data]"].ToString();

            if (pageSize > 0)
            {
                var prop = GetProperty<T>(columName);
                if (sortDirection == "asc")
                {
                    return lstElements.Where(x=>x.GetType().GetProperties().All(props => props.GetValue(x).ToString().ToLower().Contains(searchText.ToLower()))
                        .Skip(skip).Take(pageSize).OrderBy(b => prop.GetValue(b)).ToList();
                }
                else
                    return lstElements
                        .Where(x => getProp(x).ToString().ToLower().Contains(searchText.ToLower()))
                        .Skip(skip).Take(pageSize).OrderByDescending(b => prop.GetValue(b)).ToList();
            }
            else
                return lstElements;
        }
    }
    return null;
}

вот как я называю свой метод:

var listItem = ProcessCollection<Jtabel>(temp,requestFormData,x=>x.Name);

временная шкала, которую я передаюв метод, который уже заполнен, и это тип класса, который я передаю этому методу

public class Jtabel : BaseModel
{
    public string Creator { get; set; }
    public string Name { get; set; }
    public int SO { get; set; }
    public int SOD { get; set; }
    public int SAP { get; set; }
    public int BA { get; set; }
    public int Invoice { get; set; }
    public int EPD { get; set; }
    public double DP { get; set; }
}

Я постараюсь объяснить как можно более подробно, поэтому я хочу получить все свое свойство из класса Jtabel дляmy ProcessCollection, где внутри метода все свойства Jtable будут проверять каждый элемент, содержащий searchText.

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