Затрону тему с LINQ запросами и не только:
#LINQ , #CSharp
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("LINQ");
// Создание списка с произвольными числами.
List<int> numbers = new List<int> { 1, 5, 10, 12, -1, -300, 500 };
Console.WriteLine($"Min число: {numbers.Min()}");
Console.WriteLine($"Max число: {numbers.Max()}");
Console.WriteLine($"Кол-во чисел в списке: {numbers.Count()}");
Console.WriteLine($"Кол-во чисел в списке больше 0: {numbers.Count(x => x > 0)}");
Console.WriteLine($"Сумма отрицательных чисел:{numbers.Where(x => x < 0).Sum()}");
Console.ReadLine();
Console.ForegroundColor = ConsoleColor.Yellow;
// Генерация чётных чисел.
Console.WriteLine("Генерация чётных чисел");
var result = Enumerable.Range(-4, 10).Where(x => x % 2 == 0);
foreach (var item in result)
{
Console.Write(item + "\t");
}
Console.ForegroundColor = ConsoleColor.Green;
// Повторение объекта.
Console.WriteLine(" ");
Console.WriteLine(" ");
Console.WriteLine("Повторение объектов");
var repeat = Enumerable.Repeat("Привет мир!", 5);
foreach (var item in repeat)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
#LINQ , #CSharp
Столкнулся с задачей для сервиса imgbb.com (загрузка фото), точнее с его API. Вроде всё элементарно, но оказалось чуть сложнее, чем на первый взгляд.
Выделяю 3 ключевых момента, на которые необходимо сделать акцент.
1.Обязательно конвертировать фото в base64
2.Обязательно создать экземпляр класса StringContent
3.Обязательно загружать фото используя экземпляр класса MultipartFormDataContent
Вроде всего 3 акцента, но о них нигде и ничего не пишется на их странице, особенно о Multipart.
#API, #POST, #GET, #CSharp
Выделяю 3 ключевых момента, на которые необходимо сделать акцент.
foreach (string pathFile in project.Lists["pathToFoto"])
{
if (!string.IsNullOrEmpty(pathFile.Trim()))
{
string url = $"https://api.imgbb.com/1/upload?key={project.Variables["apiKey"].Value}";
string base64String = null;
1.Обязательно конвертировать фото в base64
using (Image image = Image.FromFile(pathFile))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
base64String = Convert.ToBase64String(imageBytes);
}
}
HttpClient client = new HttpClient();
2.Обязательно создать экземпляр класса StringContent
StringContent fotoContent = new StringContent(base64String, Encoding.UTF8);
3.Обязательно загружать фото используя экземпляр класса MultipartFormDataContent
var content = new MultipartFormDataContent();
content.Add(fotoContent, "image");
var result = client.PostAsync(url, content);
int code = result.Result.StatusCode.GetHashCode();
Thread.Sleep(1000);
if(result.Result.StatusCode.GetHashCode() != 200) throw new Exception("Problem WITH LOAD FOTO");
string jsonResult = result.Result.Content.ReadAsStringAsync().Result;
}
}
Вроде всего 3 акцента, но о них нигде и ничего не пишется на их странице, особенно о Multipart.
#API, #POST, #GET, #CSharp
Немного предыстории.
Заказчик хотел получать сигналы от биржи в телеграмм используя Emoji.
На первый взгляд, всё просто, если вы знаете как...., но тут явного решения не было, поэтому пришлось напрячься, чтобы найти его.
1. Переходим на сайт с emoji (пример: unicode-table.com)
2. Копируем emoji в Юникоде.
3. Пишем код:
// Читаем данные для нашего бота с ранее подготовленного .json
// Создаём экземпляр класса TelegramBotClient используя ITelegramBotClient
// Получаем чат ID.
// Эмоджи в Юникоде.
// Парсим в INT эмоджи, но уже "1F600"(т.е. без 1-х 2-х знаков), через HexNumber(шестнадцатеричное число)
// Отсылаем сообщение.
// Метод получение данных из .json
На этом всё. Код работает.
#Telegram, #CSharp
Заказчик хотел получать сигналы от биржи в телеграмм используя Emoji.
На первый взгляд, всё просто, если вы знаете как...., но тут явного решения не было, поэтому пришлось напрячься, чтобы найти его.
1. Переходим на сайт с emoji (пример: unicode-table.com)
2. Копируем emoji в Юникоде.
3. Пишем код:
private static ITelegramBotClient _botClient;
static void Main(string[] args)
{
// Читаем данные для нашего бота с ранее подготовленного .json
BotData botData = GetUserCredential<BotData>();
// Создаём экземпляр класса TelegramBotClient используя ITelegramBotClient
_botClient = new TelegramBotClient(botData.Token);
// Получаем чат ID.
string chatID = botData.Chat;
// Эмоджи в Юникоде.
string emoji = "U+1F600";
// Парсим в INT эмоджи, но уже "1F600"(т.е. без 1-х 2-х знаков), через HexNumber(шестнадцатеричное число)
int _emoji = int.Parse(emoji.Substring(2), NumberStyles.HexNumber);
// Отсылаем сообщение.
_botClient.SendTextMessageAsync(chatID, "Как прекрасен этот мир! " + char.ConvertFromUtf32(_emoji)).Wait();
}
// Метод получение данных из .json
private static T GetUserCredential<T>()
{
using (var fileStream = new FileStream("TGbot.json", FileMode.Open, FileAccess.Read))
{
string contents;
using (var sr = new StreamReader(fileStream))
{
contents = sr.ReadToEnd();
}
return JsonConvert.DeserializeObject<T>(contents);
}
}
На этом всё. Код работает.
#Telegram, #CSharp
Публикация приложения одна из простых и желанных вещей в программирование. Поэтому покажу как происходит это у меня:
Сегодня коснусь SQL запроса.
Очень часто необходимо взять данные с двух табл., которые имеют один(минимум) общий столбец с одинаковыми значениями(это условие Обязательно).
Цель:
Сделать запрос, который выберет название товаров и артикулов из 2-х разных таблиц согласно названия города и категории , в которых совпадает sku(id) товаров.
Очень часто необходимо взять данные с двух табл., которые имеют один(минимум) общий столбец с одинаковыми значениями(это условие Обязательно).
Цель:
Сделать запрос, который выберет название товаров и артикулов из 2-х разных таблиц согласно названия города и категории , в которых совпадает sku(id) товаров.
4. Запрос и результат:
Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).
Внимание(важная часть запроса, без которой он просто бесполезен):
#Sql, #MySql
SELECT olx_sales_week_by_wh.sku,products.articul,products.name
FROM olx_sales_week_by_wh
LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
WHERE olx_sales_week_by_wh.name ='Львов'
AND products.category = 'кдх2б' GROUP BY olx_sales_week_by_wh.sku
Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).
Внимание(важная часть запроса, без которой он просто бесполезен):
LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
#Sql, #MySql
Хочу сегодня добавить несколько сниппетов по LINQ запросам:
1. Поиск текста по регулярке, множество совпадений в список:
2. Создать список ID(индексы строк), в которых содержатся необходимый ключ(особенность: создание анонимного типа с свойствами(Index и Value)):
3. Получение суммы из списка, которые имеет тип данных string(List<string>) т.е. необходимо значения string сконвертировать в int:
4. Создание Dictionary<string,string> из двух разных Списков(List<string>):
5. Создание списка из двух списков, в которых значения не совпадают(т.е. в одном списке, есть в другом нет и те значения, которых нет в другом списке добавляем в новый третий список):
Получается новый список "compR_GBD" состоящий из этих двух значений(
#LINQ , #CSharp
1. Поиск текста по регулярке, множество совпадений в список:
Regex regexJson = new Regex(@"[a-zA-Z0-9]{20,}.*?}");
List<string> tmpList = regexJson.Matches(result).Cast<Match>().Select(m => m.Value).ToList();
List<string> resultsList = tmpList.Where(s => s.Contains("index") && s.Contains("id") && s.Contains("brandId") && !s.Contains("Отзывы") && !s.Contains("advert")).ToList();
2. Создать список ID(индексы строк), в которых содержатся необходимый ключ(особенность: создание анонимного типа с свойствами(Index и Value)):
tmpList.Select((v, i) => new { Index = i, Value = v })
.Where(p => p.Value.Contains("brandId")).Select(p => p.Index.ToString()).ToList();
3. Получение суммы из списка, которые имеет тип данных string(List<string>) т.е. необходимо значения string сконвертировать в int:
var sumTempResList = tmpResList.Where(d => !string.IsNullOrEmpty(d.Trim())).Select(s => int.Parse(s.Replace("-",""))).ToList().Sum();
4. Создание Dictionary<string,string> из двух разных Списков(List<string>):
List<string> keysList = new List<string>{"2569746", "9876415", "6957459"};
List<string> valuesList = new List<string>{"val1", "val2", "val3"};
Dictionary<string,string> resDict = keysList.Zip(valuesList, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v);
5. Создание списка из двух списков, в которых значения не совпадают(т.е. в одном списке, есть в другом нет и те значения, которых нет в другом списке добавляем в новый третий список):
List<string> artsG = new List<string>{"2569746", "9876415", "6957459", "5947945", "9874647"};
List<string> skues = new List<string>{"2569746", "9876415", "6957459"};
List<string> compR_GBD = artsG.Where(n => !skues.Any(s => s.ToLower() == n.ToLower())).ToList();
Получается новый список "compR_GBD" состоящий из этих двух значений(
"5947945", "9874647"
)#LINQ , #CSharp
Хочу показать пример SQL запроса, который пришлось использовать.
Цель:
Сделать запрос, который покажет ежедневные суммы расходов на рекламу за "текущий" и "прошлый" месяц, для определенной категории товара.
Цель:
Сделать запрос, который покажет ежедневные суммы расходов на рекламу за "текущий" и "прошлый" месяц, для определенной категории товара.
SELECT date, ROUND(sum(spend),2) spend
FROM `reklama` WHERE category = 'одеяла' AND (MONTH(date) = MONTH(CURRENT_DATE()) OR MONTH(date) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH))
GROUP BY date
ORDER BY date ASC
В этом запросе играет ключевую роль, функция
MONTH()
- предназначена для того, чтобы извлекать месяц из даты, как раз то, что нам необходимо. И конечно, помним о том, чтобы увидеть все даты, необходимо сделать группировку
GROUP BY date,
без этой функции просто будет показана одна дата(одна строка).#Sql, #MySql
Есть хорошая программа для просмотра данных в Б.Д. heidisql и хочется использовать её для работы с локальной базой к примеру: (localdb)\MSSQLLocalDB используя SQL Server.
Но, просто подключиться к ней, не так уж и просто, для этого необходимо сделать ряд действий:
1. Узнаём куда подключаемся:
Но, просто подключиться к ней, не так уж и просто, для этого необходимо сделать ряд действий:
1. Узнаём куда подключаемся: