List adminUsers =
RetrieveUsersForAdminRole(RoleType.Admin);
User firstUser = null;
If (adminUsers != null) && (adminUsers.Count > 0)
{
firstUser = adminUsers[0];
Это можно заменить простым запросом LINQ:
List adminUsers =
RetrieveUsersForAdminRole(RoleType.Admin);
User firstUser = adminUsers.FirstOrDefault();
Если пользователей не найдено, будет возвращено значение по умолчанию лежащего в основе типа.
Вам больше не нужно писать сложные классы IComparer, чтобы сортировать данные. Теперь для упорядочения можно использовать метод OrderBy. Приведенный ниже пример запроса отличается краткостью: var filteredUsers = Users.Where(u => u.Active && u.AllowLogin && !u.Loggedln) .OrderBy( u => u.Name);
Функция OrderBy принимает параметр, используемый для сортировки. Если нужна множественная сортировка, нужно применить оператор ThenBy.
var filteredUsers = Users.Where(u => u.Active && u.AllowLogin && !u.Loggedln) .OrderBy( u => u.Name).ThenBy(u => u.Location);
Сортировать можно и в порядке убывания. В LINQ для этого есть оператор OrderByDescending.
var filteredUsers = Users.Where(u => u.Active && u.AllowLogin && !u.Loggedln) .OrderByDescending( u => u.Name) .ThenBy(u => u.Location);
Не следует использовать циклы для инициализации массивов. Все мы делали это, чтобы написать быстрый код для тестирования. Теперь это можно заменить методом System.Linq.Enuemerable.Range. int[] monthsInAYear = new int[12];
for (int counter = 0; counter < monthsInAYear.Length; counter++)
{
monthsInAYear[counter] = counter + 1;
}
В LINQ это займет одну строку кода:
int[] monthsInAYearByLINQ = System.Linq.Enumerable.Ranged(1, 12).ToArray();
Если вам нужно в коде пройти по двум массивам, аналогичным по своей природе, можете использовать метод расширения Concat, чтобы написать лаконичный код. Рассмотрим пример:
int[] firstArray =
System.Linq.Enumerable. Range(1, 12).ToArray(); int[] secondArray =
System. Linq. Enumerable. Range(13, 12).ToArrayO;
foreach (var fa in firstArray)
{
allElements.AppendLine(string.Format(«{0}», fa));
}
foreach (var sa in secondArray)
{
allElements.Append Line(string.Format(«{0}», sa));
}
А вот код, в котором задействован оператор Concat:
int[] firstArray =
System. Linq. Enumerable. Range(1, 12).ToArrayO; int[] secondArray =
System. Linq. Enumerable. Range(13, 12).ToArrayO;
foreach (var a in firstArray.Concat(secondArray))
{
allElements.AppendLine(string.Format(«{0}», a));
}
7. Избегайте преобразований
Преобразование — это методика, используемая для возвращения новой коллекции, получаемой за счет прохождения в цикле по другой коллекции и применения фильтра. Возьмем для примера текст, приведенный ниже. Здесь после прохождения в цикле по коллекции создается массив.
public Users[] FindUsers(RoleType r)
{
IEnumerable users = FindUsersQ;
List filteredUsers = new List();
foreach (User u in users)
{
filteredUsers.Add(new User {
FirstName = u.FirstName,
…
return filteredUsers.ToArray();
}
Вместо того чтобы создавать временный список и затем заполнять его значениями, можно воспользоваться методами LINQ Select и ToArray для возврата результатов.
public Users[] FindUsers(RoleType r)
{
return FindUsersQ .Select(user => new User {
FirstName = u.FirstName,
…
.Where(user => user.Role == r)
.ToArray();
}
Ключевое слово let позволяет создавать временные переменные в запросе LINQ, благодаря чему ваш Select становится проще читать и изменять. Вы можете предварительно определять переменные на определенном этапе запроса. Эти переменные затем могут быть использованы в остальной части запроса.
Например, следующий запрос вычисляет среднее значение дважды. Второе вычисление можно не
производить, если применить оператор let. Благодаря сокращению объема вычислений запрос будет работать быстрее.
var results= from store in Stores
where store.Sales.Average(s => s.Price) > 500 select new {
Name = store.Name, StoreAveragePrice =
store.Sales.Average(s => s.Price) };
Вот этот же фрагмент, использующий let:
var results= from store in Stores let AveragePrice =
store.Sales.Average(s => s.Price) where AveragePrice > 500
select new {
Name = store.Name,
StoreAveragePrice = AveragePrice
};
Запросы LINQ могут упростить работу, если вы применяете регулярные выражения. Посмотрите на следующий пример, в котором мы проходим по коллекции с использованием регулярного выражения.
Обратите внимание на то, что с отобранными при помощи RegEx результатами можно выполнять другие запросы LINQ.
List examinerStatements = new List();
examinerStatements.Add(«Mark was present.»);
examinerStatements.Add(«Julie was present.»);
examinerStatements.Add(«John was absent»);
System.Text.RegularExpressions.Regex myRegEx = new System.Text.RegularExpressions.Regex(«present»);
var presentStudents = examinerStatements .Where(statement =>
myRegEx.IsMatch(statement)).ToList();
foreach (var examinerStatement in presentStudents)
{
Наверное, вы знаете, что запросы LINQ нельзя осуществлять со списками ArrayList. Дело в том, что они
Далее появляется форма, в которой задаётся имя выгружаемой таблицы (в приведенном примере — kolxozA):
Далее идём в MapInfo (меню Файл>Открыть), открываем базу agrohim.mdb :
… и ищем в списке таблиц базы только-что созданную таблицу kolxozA :
Результат будет выглядеть приблизительно так:
Как видите, в таблицу будут помещены следующие данные: номер участка(nu), площадь(su), pH, содержание P2O5, K2O и гумуса. Дальше, для построения тематических картограмм(примеры см.
здесь) осталось «привязать»(binding) эту таблицу к вашим пространственным данным. Этот момент уже рассмотрен на нашем сайте и его можно посмотреть по этой ссылке.
Теперь небольшое «лирическое» отступление по поводу интеграции программы «Банк агрохимических данных» и ГИС. Иногда высказывается мнение, что неплохо было бы объединить работу с пространственными данными и атрибутивной информацией (база данных) в одном программном пакете. (Так,»чтобы можно было просматривать/цифровать/макетировать и набивать/хранить данные в одной программе»). Да, неплохо, слов нет. Но тут возникают некоторые вопросы:
Кто будет финансировать работы по созданию такой интегрированной ГИС для организаций агрохимобслуживания? Создание полноценной узкоспециализированной ГИС — дело не одного года даже для коллектива опытных разработчиков.
А есть ли вообще необходимость изобретать велосипед (разрабатывать доморощенную ГИС) на фоне существующих доминирующих игроков(ArcGIS, MapInfo). По нашему скромному мнению, вышеназванные ГИС предлагают исчерпывающие возможности, и решение проблемы лежит, по-видимому, в создании неких настроек(Add-On’ ов, Plug-In’ов) к этим ГИС. Да и то сказать, учитываю весьма высокую степень специфичности(уникальности) подходов, вряд ли стоит надеяться на полную универсальность любой созданной надстройки. Как минимум, потребуется индивидуальная подгонка каждого такого решения под специфические особенности каждой организации. Готовы ли организации оплачивать даже такой примитивный подход? Вопрос (учитывая уровень компетентности и заинтересованности лиц, принимающих решения).
Опыт Лаборатории АгроГИС-технологий говорит о том, что 90 % потребностей организаций агрохимического обслуживания в области ГИС-технологий связано с оформлением/выдачей заказчику тематических картограмм по результатам агрохимического обследования. Если попытаться структурировать такой подход, то он требует выполнения двух основных задач:
Оцифровка/оформление(макетирование)/просмотр/печать тематических картограмм. Инструмент решения -> ГИС-пакет.
Ввод данных/хранение/получение отчетов (аналитики) по результатам агрохимических обследований . Инструмент решения -> программа (оболочка) «Банк агрохимических данных» (неважно какого производителя, важно, чтобы она устраивала конкретную организацию).
И тут есть небольшое противоречие (коллизия): ГИС-пакеты (неадаптированные!) не очень хорошо работают с с базами данных сложной структуры и наличием большого количества логических связей. А специфические приложения баз данных( типа, в данном случае, «Банк агрохимических данных») не содержат функций ввода/отображения/анализа пространственной информации. Но, к счастью, решение проблемы , на наш взгляд, довольно простое и заключается в следующем подходе: Цифруйте/оформляйте/смотрите ваши пространственные данные в приглянувшейся вам ГИС, а данные для анализа (построения тематических картограмм) берите из вашей базы данных и привязывайте их к пространственным данным. О том, как это сделать , используя ГИС MapInfo и программу «Банк агрохимических данных» мы постарались подробно рассказать на нашем сайте.
© Simashkov.2010
22.07.2010 г.
II.2 Форма Справочник и выбор хозяйства
II.4 Форма Таблица ввода микроэлементов
5
Форма Настройки
II.5.1 Форма Настройки (Вкладка1)
II.5.2 Форма Настройки (Вкладка2)
II.7 Форма Выбор СводныйОтчет По району
III.1 Отчеты по хозяйству
III.1.1 Титул Агрохим.паспорта
III.1.2 Экспликация
III.1.3 Паспортные ведомости
III.1.3.1 Паспортная ведомость
III.1.3.2 Паспортная ведомость с образцами (Контрольная)
III.1.5 Тематическая раскраска контуров (участков)
III.1.5.1 Тематическая раскраска (Цветная)
III.1.5.2 Тематическая раскраска (Ч/б)
III.2 Сводные отчеты
III.2.1 Сводный отчет по району (Районный очерк)
III.2.1.2 Подвижный фосфор (p2o5)
III.2.1.3 Обменный калий (k2o)
III.2.2 Справка об обследованных объемах
Используемые Справочники
Cлучается, что широко-известный антивирус Касперского проявляет излишнюю осторожность и блокирует работу совершенно безобидных программ. Например, мне довелось столкнулся с тем, что Kaspersky Internet Security (KIS) не разрешает передавать файлы по встроенному в Total Commander FTP-клиенту.
К счастью, решить такую коллизию довольно легко. Всё в том же Kaspersky Internet Security жмем на кнопку Дополнительные инструменты … :
Далее выбираем Дополнительно > Угрозы и исключения :
На сл. форме выбираем Настроить исключения :
Жмем на кнопку Добавить … :
… и выбираем выполняемый модуль программы, для исключения из проверки антивирусом ( TOTALCMD.exe для случая нашего примера):
Ну собственно и всё. Теперь KIS не будет блокировать работу указанной программы.
В версии KIS 2016 (16.0.0.614) описанный механизм запуска доверенных программ реализован несколько иначе.
На Гл. форме выбираем Дополнительные инструменты :
Далее щелкаем слева по Режим Безопасных программ :
… и попадаем в форму генерации списка проверенных программ — тут нужно будет немного подождать :
В конце пути разрешаем нужные действия — например Total Commander‘у передавать данные по ftp :
Другой банальной причиной того, что ваш любимый браузер вдруг перестал запускаться может быть выставленный в положение Запрещен переключатель Запуск :
Теперь попробуйте с такой настройкой загрузить все тот же Google Chrome — точно потерпите фиаско :
В общем, мораль ясна. Если появились проблемы при выходе в Сеть или не запускается новая программа — посмотрите внимательно настройки Антивируса Касперского (если он у вас установлен, понятное дело :-). Не исключено
,
что именно тут и зарыта собака …
Как с помощью Касперского скрыть следы работы на компьютере — смотрите информацию по этой ссылке
Если нужно срочно проверить устройство на вирусы , попробуйте бесплатную утилиту Kaspersky Virus Removal Tool
10.04.2016
Внимание! Перед скачиванием Программы рекомендуем ознакомиться с документом ReadMe
1. Файл ReadMe c Инструкцией по установке можно Просмотреть здесь
2. Просмотреть Краткую инструкцию по работе с программой «Банк агрохимических данных»
3. Просмотреть Демо-версию программы «Банк агрохимических данных» версии 5.3
Скриншот главной формы программы БАД СРФ локальной (однопользовательской) версии v5.3
6. 28.04.2011 Разработан сетевой (многопользовательский) вариант программы БАД СРФ v5.2 SQL с использованием в качестве сервера БД MS SQL Server 2005 Express Edition. SQL-сервер указанной редакции является свободно распространяемым программным продуктом и не требует лицензирования.
Функционал(возможности) и пользовательский интерфейс сетевой версии программы v5.2 SQL полностью соответствует однопользовательскому варианту, представленному в Демо-версии v5.3 (см п.3).
14.08.2011 Разработан очередной релиз программы Банк агрохимических данных — сетевой вариант за номером v5.4 SQL. В указанный релиз вошли следующие изменения:
с соответствующим отображением во всех отчётах
;
в связи переходом пользователей на ОС
Windows 7.
Теперь
,
если вы работаете на ОС
Windows 7,
рекомендуем для использования в качестве СУБД
MS SQL Server 2008 Express Edition.
04.10.2011 Осуществлён переход на более современную версию библиотеки ресурсов генератора отчётов Crystal Reports для MS Visual Studio 2010. Перекомпилирована сборка программы с использованием .NET Framework 4.0
01.11.2011 Добавлены новые виды отчётов — Распределение почв по мех. составу . С примерами можно ознакомиться здесь
05.01.2012 Добавлены новые виды отчётов — Сводная агрохимическая характеристика подтипов почв пашни . С примерами можно ознакомиться здесь
04.02.2012 Добавлены следующие изменения:
сервером реализована новая возможность — Поиск и отображение в списке доступных
SQL-
серверов в сети.
с соответствующими изменениями в Отчётах и интерфейсе главной формы программы.
начиная с 04.10.2011
06.04.2012 Разработан очередной релиз программы БАД СРФ за номером v5.6 SQL. В него вошли сл. доработки:
рограммы
»
под капотом
«,
направленные
,
в основном
,
на увеличение скорости генерации отчётов.
08.07.2012 Выпущен релиз программы БАД СРФ за номером v5.7 SQL. В него вошли следующие основные изменения:
сервера и дату последней введённой записи.
01.12.2012 Выпущен релиз программы БАД СРФ за номером v5.8 SQL. В него вошли следующие основные изменения:
Добавлена новая возможность — создание круговых диаграмм распределения группировок по
pH,
фосфор
,
калий и гумус в разрезе хозяйства и адм. района. С примером можно ознакомиться здесь
01.09.2014 Выпущен релиз программы БАД СРФ за номером v6.2 SQL. В него вошли следующие основные изменения:
.
© Simashkov.2009-2015
… и далее попадаем в галерею доступных форматов сеток:
Форма редактирования открытой таким образом сетки выглядит сл. образом:
Simashkov.2015
15.03.2015 г.