Одно замечание об использовании NetServerGetInfo (), которая все еще работает в Windows 10 (10240.th1_st1) ...
https://msdn.microsoft.com/en-us/library/windows/desktop/aa370903%28v=vs.85%29.aspx
sv101_version_major
Основной номер версии и тип сервера.
Номер основной версии операционной системы указывается в младших 4 битах. Тип сервера указан в старших 4 битах. Битовая маска MAJOR_VERSION_MASK, определенная в заголовке Lmserver.h {0x0F}, должна использоваться приложением для получения основного номера версии от этого члена.
Другими словами, (sv101_version_major & MAJOR_VERSION_MASK).
Что-то вроде
var TagIds = new int[] {12, 32, 42};
var q = from map in Context.TagMaps
where TagIds.Contains(map.TagId)
select map.Items;
должно делать то, что вам нужно. Это сгенерирует предложение In (12, 32, 42) (или, точнее, параметризованное предложение IN, если я не ошибаюсь).
данный массив элементов:
var list = new int[] {2,3,4}
использование:
where list.Contains(tm.TagId)
List<int> tagIds = new List<int>() {2, 3, 4, 7};
int tagIdCount = tagIds.Count;
//
// Items that have any of the tags
// (any item may have any of the tags, not necessarily all of them
//
var ItemsAnyTags = db.Items
.Where(item => item.TagMaps
.Any(tm => tagIds.Contains(tm.TagId))
);
//
// Items that have ALL of the tags
// (any item may have extra tags that are not mentioned).
//
var ItemIdsForAllTags = db.TagMap
.Where(tm => tagIds.Contains(tm.TagId))
.GroupBy(tm => tm.ItemId)
.Where(g => g.Count() == tagIdCount)
.Select(g => g.Key);
//
var ItemsWithAllTags = db.Items
.Where(item => ItemsIdsForAllTags.Contains(item.ItemId));
//runs just one query against the database
List<Item> result = ItemsWithAllTags.ToList();