Записи с тегом «LINQ»
Нумерация записей коллекции средствами 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);
}
}
}
}
Extension-методы для DataRow и DataTable
Долгое время использовал такую конструкцию если нужно было получить данные из нетипизированного DataRow:
var temp = Convert.ToInt32(row["SomeField"]);
В случае, когда нужно было обработать nullable-поля, то использовался вот такой метод:
/*
* Taken from: http://stackoverflow.com/questions/209160/nullable-type-as-a-generic-parameter-possible
*/
public static Nullable<T> GetValueOrNull<T>(DataRow row, string key) where T : struct
{
object columnValue = row[key];
if (!(columnValue is DBNull))
return (T)columnValue;
return null;
}
...
int? temp = GetValueOrNull<int>(row, "SomeField");
Оказалось, что есть более простой способ с использованием extension-метода Field<>():
int temp = row.Field<int>("SomeField");
Для класса DataTable есть свой набор полезных расширений
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 очень удобен прежде всего тем, что можно работать с типизированными данными. Но иногда это мешает, например, когда нужно сделать сортировку, зная только имя поля: типичное требование для реализации таблицы данных с сортировкой. Ситуация усложняется, когда сортировка идёт по полям связанных сущностей.
