Я попробовал это, также с использованием linq. Просто замените строку своей формой. но строка облегчает понимание алгоритма. Пожалуйста, проверьте комментарии в коде для различных шагов:
var lists = new List<List<string>>();
lists.Add(new List<string> { "a", "b", "c" });
lists.Add(new List<string> { "a", "c" });
lists.Add(new List<string> { "d", "e" });
lists.Add(new List<string> { "e", "d" });
lists.Add(new List<string> { "e", "a" }); // from my comment
var results = new List<List<string>>();
foreach (var list in lists)
{
// That checks, if for this list, there is already a list, that contains all the items needed.
if (results.Any(r => r.Count == r.Union(list).Count()))
{
continue;
}
// get the lists, that contains at least one item of the current "list".
// This is important, as depending on the amount of elements, there have to be specific further steps.
var listsWithItemsOfList = results.Where(r => list.Any(x => r.Contains(x)));
// if not item, then you just have to add the whole content, as non of the colors exist.
if (!listsWithItemsOfList.Any())
{
results.Add(new List<string>(list));
}
// if exactly, one, that add all the items, that were missing
// (it might be, that nothing is added in case list.Except(l) is empty.
else if(listsWithItemsOfList.Count() == 1)
{
var listWithOneItem = listsWithItemsOfList.Single();
listWithOneItem.AddRange(list.Except(listWithOneItem));
}
else
{
// if multiple elements, it's getting complicated.
// It means, that all needed items are currently spreaded over multiple lists, that have now to be merged.
var newMergedList = listsWithItemsOfList.SelectMany(x => x).Distinct().ToList(); // merge all into one
results.RemoveAll(x => listsWithItemsOfList.Contains(x)); // remove those lists from results
results.Add(newMergedList); // just add one new list, containing all.
}
}
У меня была такая же проблема. Мое приложение также было приложением Silverlight, и служба вызывалась из библиотеки классов с настраиваемым UserControl, который использовался в ней.
Решение простое. Скопируйте определения конечных точек из файла конфигурации (например, ServiceReferences.ClientConfig) библиотеки классов в файл конфигурации приложения silverlight. Я знаю, что вы ожидаете, что это сработает и без этого, но, видимо, у кого-то в Редмонде в тот день был отпуск.
Не уверенный, если это - проблема. Конечная точка и связывающий обоих имеет то же имя
У Вас есть Интерфейс, который реализует Ваш класс "UserService".
Ваши конечные точки должны указать интерфейс для атрибута контракта:
contract="UserService.IUserService"
Не уверенный, если это - действительно проблема, но я вижу, что у Вас есть то же название Вашей обязательной конфигурации ().
Я обычно пытаюсь назвать свои конечные точки чем-то как "UserServiceBasicHttp", или что-то подобное ("Привязка" действительно не имеет ничего, чтобы сделать здесь), и я пытаюсь назвать свои обязательные конфигурации чем-то с ".... Конфигурация", например, "UserServiceDefaultBinding", для предотвращения любых потенциальных столкновений имени.
Marc
Измените web.config службы WCF на "endpoint address =" "binding =" basicHttpBinding "..." (ранее binding = "wsHttpBinding") После сборки приложения в "ServiceReferences .ClientConfig "" "конфигурация> имеет значение. Тогда все будет нормально.
На всякий случай, если кто-то столкнется с той же проблемой при использовании WPF (а не WCF или Silverlight):
У меня была эта ошибка при подключении к веб-службе. Когда мой код находился в «основном» решении для приложения WPF, никаких проблем, он работал отлично. Но когда я переместил код на более разумное решение на уровне DAL, возникло исключение.
Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт MyWebService.MyServiceSoap в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или потому, что в клиентском элементе не может быть найден элемент конечной точки, соответствующий этому контракту.
Как было сказано «Sprite» в этой ветке, вам необходимо вручную скопировать тег.
Для приложений WPF это означает копирование тега из app.config в моем решении DAL в app.config в основном решении для приложений WPF.