Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Я что-то упустил насчет LINQ?
Кажется, я что-то упускаю из виду LINQ. Мне кажется, что он берет некоторые элементы SQL, которые мне нравятся меньше всего, и перемещает их в язык C# и использует их для других вещей.
Я имею в виду, что я мог видеть преимущество использования SQL-подобных утверждений на вещах, отличных от баз данных. Но если бы я хотел написать SQL, ну, почему бы просто не написать SQL и не сохранить его из C#?, что я здесь упускаю?
LINQ - это не про SQL. LINQ - это применение парадигм функционального программирования к объектам.
LINQ до SQL - это ORM, построенный на вершине фундамента LINQ, но LINQ-это гораздо больше. Я не использую LINQ для SQL, но я использую LINQ все время.
Возьмите на себя задачу найти пересечение двух списков:
Перед LINQ эта задача требует написания вложенного foreach, который повторяет малый список один раз для каждого элемента в большом списке O(N*M), и занимает около 10 строк кода.
foreach (int number in list1)
{
foreach (int number2 in list2)
{
if (number2 == number)
{
returnList.add(number2);
}
}
}
Используя LINQ, он делает то же самое в одной строке кода:
var results = list1.Intersect(list2);
Вы заметите, что это не похоже на LINQ, но это так. Вам не нужно использовать синтаксис выражения, если вы этого не хотите.
До:
// Init Movie
m_ImageArray = new Image[K_NB_IMAGE];
Stream l_ImageStream = null;
Bitmap l_Bitmap = null;
// get a reference to the current assembly
Assembly l_Assembly = Assembly.GetExecutingAssembly();
// get a list of resource names from the manifest
string[] l_ResourceName = l_Assembly.GetManifestResourceNames();
foreach (string l_Str in l_ResourceName)
{
if (l_Str.EndsWith(".png"))
{
// attach to stream to the resource in the manifest
l_ImageStream = l_Assembly.GetManifestResourceStream(l_Str);
if (!(null == l_ImageStream))
{
// create a new bitmap from this stream and
// add it to the arraylist
l_Bitmap = Bitmap.FromStream(l_ImageStream) as Bitmap;
if (!(null == l_Bitmap))
{
int l_Index = Convert.ToInt32(l_Str.Substring(l_Str.Length - 6, 2));
l_Index -= 1;
if (l_Index < 0) l_Index = 0;
if (l_Index > K_NB_IMAGE) l_Index = K_NB_IMAGE;
m_ImageArray[l_Index] = l_Bitmap;
}
l_Bitmap = null;
l_ImageStream.Close();
l_ImageStream = null;
} // if
} // if
} // foreach
После:
Assembly l_Assembly = Assembly.GetExecutingAssembly();
//Linq is the tops
m_ImageList = l_Assembly.GetManifestResourceNames()
.Where(a => a.EndsWith(".png"))
.OrderBy(b => b)
.Select(c => l_Assembly.GetManifestResourceStream(c))
.Where(d => d != null) //ImageStream not null
.Select(e => Bitmap.FromStream(e))
.Where(f => f != null) //Bitmap not null
.ToList();
Или, альтернативно ( синтаксис запроса ):
Assembly l_Assembly = Assembly.GetExecutingAssembly();
//Linq is the tops
m_ImageList = (
from resource in l_Assembly.GetManifestResourceNames()
where resource.EndsWith(".png")
orderby resource
let imageStream = l_Assembly.GetManifestResourceStream(resource)
where imageStream != null
let bitmap = Bitmap.FromStream(imageStream)
where bitmap != null)
.ToList();
LINQ-это не просто система ORM, как отметил Джонатан, она приносит много функциональных элементов программирования в C#. и позволяет вам делать много вещей "database-y" в обычном коде C#. Трудно объяснить, насколько невероятно мощным это может быть. Рассмотрим, как много имеют твердые, хорошо продуманные общие структуры данных (такие как список, стек, dictionary/hash, и т. д.) включение в общие рамки улучшило состояние развития современных языков. Именно потому, что использование этих структур данных является очень распространенным явлением и сокращение интеллектуальных затрат на их использование является огромным преимуществом. LINQ не делает ничего, что вы не можете сделать сами, но это делает многие операции намного проще и проще.
Рассмотрим проверенный временем пример удаления дубликатов из неупорядоченного списка. В языке более низкого уровня, таком как C или C++, вам, вероятно, придется сортировать список и поддерживать два индекса в списке, когда вы удаляете дураков. В языке с хэшами (Java, C#, Javascript, Perl и т. д.) вы можете создать hash, где ключи являются уникальными значениями, А затем извлечь ключи в новый список. С LINQ вы можете просто сделать это:
int[] data = { 0, 1, 3, 3, 7, 8, 0, 9, 2, 1 };
var uniqueData = data.GroupBy(i => i).Select(g => g.Key);
Поскольку linq на самом деле является monads в одежде sql, я использую его в проекте для создания асинхронных веб-запросов с продолжением монады, и это доказывает, что он действительно хорошо работает!
Ознакомьтесь с этими статьями: http://www.aboutcode.net/2008/01/14/Async+WebRequest + использование+LINQ+Syntax.aspx http://blogs.msdn.com/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx
Из первой статьи:
var requests = new[]
{
WebRequest.Create("http://www.google.com/"),
WebRequest.Create("http://www.yahoo.com/"),
WebRequest.Create("http://channel9.msdn.com/")
};
var pages = from request in requests
select
from response in request.GetResponseAsync()
let stream = response.GetResponseStream()
from html in stream.ReadToEndAsync()
select new { html, response };
foreach (var page in pages)
{
page(d =>
{
Console.WriteLine(d.response.ResponseUri.ToString());
Console.WriteLine(d.html.Substring(0, 40));
Console.WriteLine();
});
}
Дело в том, что LINQ интегрирует ваши запросы в ваш основной язык программирования, позволяя вашему IDE предоставить вам некоторые возможности (например, поддержку Intellisense и отладки), которых у вас в противном случае не было бы, и позволить компилятору ввести-проверить ваш код SQL (что невозможно с обычным строковым запросом).