Предположение при интернет-соединении было бы доступностью сети, в NetworkInterface.GetIsNetworkAvailable()
. События на NetworkChange
могут сказать Вам, когда это изменяется. Оба класса находятся в System.Net.NetworkInformation
пространство имен.
, Конечно, Вы не будете знать, действительно доступен ли Интернет, пока Вы не пытаетесь соединиться с чем-то.
Linq to SQL имеет некоторые ограничения в отношении активной загрузки.
Таким образом, нетерпеливая загрузка в Linq To SQL - это только жадная загрузка для одного уровня за раз. Как и для ленивой загрузки, с Load Варианты мы все равно выдадим один запрос на строку (или объект) на корневом уровне и это то, чего мы действительно хотим чтобы избежать экономии базы данных. Который это своего рода точка с нетерпением загрузка, чтобы сохранить базу данных. В способ, которым LINQ to SQL отправляет запросы для иерархия уменьшит производительность по log (n), где n - количество корневых объектов. Вызов ToList не изменит поведения, но будет контролировать, когда вовремя все запросы будет добавлено в базу данных.
Подробнее см .:
http://www.cnblogs.com/cw_volcano/archive/2012/07/31/2616729.html
Я уверен, что это можно было бы сделать лучше, но мой код работал с минимальным количеством запросов. По одному на уровень. Очевидно, что загрузка с использованием L2S не вызывает особого энтузиазма, но если кто-то знает правильный способ, я хотел бы знать для справок в будущем.
var query =
from g in cdc.Global
where g.active == true && g.globalId == 41
select g;
var globalList = query.ToList();
List<Category> categoryList = g.category.ToList<Category>();
var categoryIds = from c in cdc.Category
where c.globalId == g.globalId
select c.categoryId;
var types = from t in cdc.ItemTypes
where categoryIds.Any(i => i == t.categoryId)
select t;
List<ItemType> TypeList = types.ToList<ItemType>();
var items = from i in cdc.Items
from d in cdc.ItemData
where i.ItemId == d.ItemId && d.labelId == 1
where types.Any(i => i == r.ItemTypes)
select new
{
i.Id,
// A Bunch of more fields shortened for berevity
d.Data
};
var ItemList = items.ToList();
// Keep on going down the hierarchy if you need more child results
// Do your processing psuedocode
for each item in list
filter child list
for each item in child list
.....
//
Не возражал бы узнать, как все это сделать, используя универсальные шаблоны и рекурсивный метод с учетом таблицы верхнего уровня.