Записи с тегом «C#»
Нумерация записей коллекции средствами LINQ
Для получения индекса элемента коллекции в LINQ существует специальная версия метода Select():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_Indexing
{
class Program
{
static void Main(string[] args)
{
var data = new string[] { "First", "Second", "Third" };
var dataWithIndex = data.Select((x, index) => new
{
Index = index,
Title = x
});
foreach (var item in dataWithIndex)
{
Console.WriteLine("{0} {1}", item.Index, item.Title);
}
}
}
}
Копирование (клонирование) объектов в C#
В .NET, как выяснилось, нет встроенной возможности получить копию объекта. Один из способов — использование сериализации.
Элементы шаблонов в ASP.NET WebForms, нетривиальный data binding
WebForms задумывался для создания кода, обрабатывающего события пользовательского интерфейса, однако
в некоторых случаях бывает необходимо отойти от этой парадигмы и использовать кодовые вставки <%...%> в .aspx-файлах
почти в стиле ASP.NET MVC.
Встроенные компоненты, использущие т.н. data binding тоже иногда заставляют задуматься :)
Рекурсивный поиск контролов в ASP.NET WebForms без рекурсии
public static Control FindControlRecursively(Control root, string id)
{
Stack<Control> stack = new Stack<Control>();
stack.Push(root);
while (stack.Count > 0)
{
Control current = stack.Pop();
if (current.ID == id)
{
return current;
}
foreach (Control control in current.Controls)
{
stack.Push(control);
}
}
return null;
}
WHERE IN ... в LINQ to SQL
Для того, чтобы был сгенерирован правильный SQL-запрос с WHERE IN ... нужно сделать несколько дополнительных действий:
var ids = new List<int> {1,2,3,4};
var result = from s in Db.Snippets
where ids.Contains(s.Id)
select s;
Групповые операции в LINQ to SQL
LINQ to SQL не умеет оптизировать однотипные действия над несколькими сущностями, например, для удаления большого количества
записей по условию их придётся сначала выбрать отдельным запросом, пометить как удалённые с помощью методов DeleteOnSubmit() или
DeleteAllOnSubmit(), а при вызове SubmitChanges() будет сгенерировано столько SQL-запросов c DELETE, сколько было удаляемых
записей.
Dynamic LINQ: когда мешает строгая типизация
LINQ очень удобен прежде всего тем, что можно работать с типизированными данными. Но иногда это мешает, например, когда нужно сделать сортировку, зная только имя поля: типичное требование для реализации таблицы данных с сортировкой. Ситуация усложняется, когда сортировка идёт по полям связанных сущностей.
Полнотекстовый поиск в MS SQL Express и его использование с LINQ to SQL
Для включения функции полнотекстового поиска в MS SQL редакции Express (проверялось на 2005-й версии) нужно немного больше действий, чем для использования полнотекстовых индексов в MyISAM-таблицах MySQL, но всё возможно.
Выбор значения автоинкрементного поля для вставленной записи в MS SQL
После INSERT нужно выполнить дополнительные действия:
SqlCommand command = new SqlCommand(@" INSERT INTO [dbo].[orders] ([date_time] ... ... ,[total]) VALUES (@date_time ... ... ,@total); SELECT SCOPE_IDENTITY(); "); int insertedOrderId = Convert.ToInt32(command.ExecuteScalar());
Многострочные (multiline) строки в C# и JavaScript
Иногда строку удобно отформатировать определённым образом, например, если она является SQL-запросом. В C# это делается добавлением символа @ перед строкой.
