выбор динамического столбца в LINQ
]динамически выбрать конкретный столбец в запросе LINQ может быть сложным, когда столбец неизвестен во время компиляции. Тем не менее, существует решение, которое включает в себя динамическое создание выражений Lambda, передаваемых для выбора.
]рассмотрим следующий класс данных:
]public class Data
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
}
, чтобы динамически выбирать конкретные столбцы, вы можете использовать метод CreateNewStatement для динамического создания выражения лямбды:
]private Func CreateNewStatement(string fields)
{
var xParameter = Expression.Parameter(typeof(Data), "o");
var xNew = Expression.New(typeof(Data));
var bindings = fields.Split(',')
.Select(o => o.Trim())
.Select(o =>
{
var mi = typeof(Data).GetProperty(o);
var xOriginal = Expression.Property(xParameter, mi);
return Expression.Bind(mi, xOriginal);
});
var xInit = Expression.MemberInit(xNew, bindings);
var lambda = Expression.Lambda>(xInit, xParameter);
return lambda.Compile();
}
Этот метод принимает разделенный запятой список полей в качестве строки и динамически генерирует выражение лямбда, которое инициализирует новый объект данных с указанным полем.
]затем вы можете использовать метод CreateNewStatement для создания выражения лямбды и передать его на выбор:
]var result = list.Select(CreateNewStatement("Field1, Field2"));
]
это вернет последовательность объектов данных с заполненным указанным поле. Обратите внимание, что этот метод подходит для ситуаций, когда выбранное поле не известно во время компиляции. Если выбранное поле является статическим, более эффективно использовать обычные выражения Lambda или методы, основанные на отражении.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3