Мне нужно получить пользовательские столбцы из базы данных с Entity Framework.
Мне нужно создать столбец Проекция на основе переданной коллекции, Список строк, где каждый элемент содержит имена столбцов, с Entity Framework
У меня есть список строк, который содержит строки, подобные этой;
List<string> columnsToSelect = new List<string>();
columnsToSelect.Add("col1 + col2");
columnsToSelect.Add("col2");
columnsToSelect.Add("col3 + col4");
У меня есть таблица с именем «RawData» с 6 столбцами:
Идентификатор EmpId col1 col2 col3 col4
![RawData Sample Table](https://i.stack.imgur.com/nUYqG.png)
Теперь, если бы я запросил простой
var rawDatacolums = Context.RawData.where(a => a.EmpId = @EmpId)
это сгенерирует оператор SQL следующим образом:
Select Id,EmpId,col1,col2,col3,col4 from RawData
where EmpId = @EmpId
Здесь я хочу передать columnsToSelect в качестве аргумента, и мой результат должен основываться на селекторе столбцов, который я передаю в List
Что я хочу сделать, это
var rawDatacolums = Context.RawData.select(columnsToSelect).where(a =>
a.EmpId = @EmpId)
Который должен генерировать SQL как;
Select col1 + col2 as Col1Col2, col2 as Col2, col3 + col4 as Col3Col4
from RawData where EmpId = @EmpId
Я пытался использовать «SelectProperties» из этой статьи здесь:
https://byalexblog.net/entity-framework-dynamic-columns
https://github.com/lAnubisl/entity-framework-dynamic-queries/blob/master/entity-framework-dynamic-queries/SelectiveQuery.cs
var rawDatacolums = Context.RawData.SelectProperties(columnsToSelect)
если передать точные столбцы, такие как col1, col2 как список, он работает
но это не работает так, как я хочу, например, сумма двух столбцов
Мое требование - мне нужно спроектировать добавление столбцов
как 'col1 + col2' & 'col3 + col4'
Обновленный ответ
Основываясь на нескольких предложениях, я больше играл с Dynamic LINQ
и я заставил это работать, я смог применить различные математические условия к моей проекции
и смог создать Динамический Класс из него
Исходная ссылка на github приведена ниже:
https://github.com/kahanu/System.Linq.Dynamic
но я нашел объяснение здесь более полезным, пожалуйста, посмотрите здесь:
http://ak -dynamic-linq.azurewebsites.net / GettingStarted # преобразования
Некоторые другие материалы, на которые я ссылался и которые нужно было использовать - которые могут быть полезны для кого-то здесь - http://www.albahari.com/nutshell/predicatebuilder.aspx
Пример рабочего кода будет выглядеть так:
var sampleQuery = "New(Col1+Col2 as Stage1Count)";
IEnumerable queryResult= Context.RawData.AsQueryable().Select(sampleQuery );
System.Diagnostics.Debug.WriteLine("Debug Sample Query: " + queryResult.ToString());
foreach (var cust in queryResult)
{
System.Diagnostics.Debug.WriteLine("Debug Sample StageCount : " + cust.ToString());
}
Спасибо всем за ваши комментарии и предложения! Ура!