Записи с тегом «LINQ»

Нумерация записей коллекции средствами LINQ

27.11.2011 12:25 / Артём Волк / 156 просмотров / ...

Для получения индекса элемента коллекции в 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

04.03.2011 20:21 / Артём Волк / 504 просмотра / ...

Долгое время использовал такую конструкцию если нужно было получить данные из нетипизированного 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

31.10.2009 11:52 / Артём Волк / 895 просмотров / ...

Для того, чтобы был сгенерирован правильный 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

31.10.2009 11:35 / Артём Волк / 1269 просмотров / ...

LINQ to SQL не умеет оптизировать однотипные действия над несколькими сущностями, например, для удаления большого количества записей по условию их придётся сначала выбрать отдельным запросом, пометить как удалённые с помощью методов DeleteOnSubmit() или DeleteAllOnSubmit(), а при вызове SubmitChanges() будет сгенерировано столько SQL-запросов c DELETE, сколько было удаляемых записей.

как обойти...

Dynamic LINQ: когда мешает строгая типизация

31.10.2009 11:18 / Артём Волк / 1096 просмотров / ...

LINQ очень удобен прежде всего тем, что можно работать с типизированными данными. Но иногда это мешает, например, когда нужно сделать сортировку, зная только имя поля: типичное требование для реализации таблицы данных с сортировкой. Ситуация усложняется, когда сортировка идёт по полям связанных сущностей.

решение есть!