Используйте kafka или 0mq , чтобы свободно соединить отправителя ноутбука с приемником rasp pi. Если один из них перезагрузится, это нормально, другой продолжит отключаться. В случае с kafka вы сможете снова и снова воспроизводить сеанс работы с издателем ноутбука, когда вы настраиваете и тестируете код клиента rasp pi.
LINQ не о SQL. LINQ о том, чтобы быть, применяют функциональное программирование paradigmns на объекты.
LINQ к SQL является созданным ontop 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, поскольку Jonathan указал, что он приносит много элементов функционального программирования к C#. И это позволяет Вам сделать много вещей "базы-данных-y" в обычном коде C#. Трудно объяснить, как невероятно мощный, который может быть. Рассмотрите, насколько, имея тело, хорошо разработал универсальные структуры данных (такие как список, стек, словарь/хеш, и т.д.) включенный в общие основы улучшил состояние разработки на современных языках. Точно, потому что использование этих структур данных очень распространено и уменьшает, интеллектуальные издержки использования их являются огромным преимуществом. LINQ не делает ничего, что Вы не можете сделать сами, но он делает много из операций намного более простым и намного легче.
Рассматривают проверенный временем пример удаления дубликатов из незаказанного списка. На более низком языке уровня как C или C++ необходимо было бы, вероятно, отсортировать список и поддержать два индекса в список, когда Вы удалили простофиль. На языке с хешами (Java, C#, JavaScript, Perl, и т.д.) Вы могли создать хеш, где ключи являются уникальными значениями, затем извлекают ключи в новый список. С LINQ Вы могли просто сделать это:
int[] data = { 0, 1, 3, 3, 7, 8, 0, 9, 2, 1 };
var uniqueData = data.GroupBy(i => i).Select(g => g.Key);
Так действительно, действительно грандиозное предприятие о LINQ не имеет никакого отношения к Linq к SQL. Это об улучшениях, которые это принесло к самому языку C#.
Поскольку linq является действительно монадами в одежде sql, я использую его на проекте сделать асинхронные веб-запросы с монадой продолжения, и это, оказывается, работает действительно хорошо!
Выезд эти статьи: http://www.aboutcode.net/2008/01/14/Async+WebRequest+Using+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 (который невозможен с нормальным строковым запросом).