Получается наоборот. Выводятся все публикации, у которых категории и теги четко соответствуют поисковым наборам + те, у которых вообще нет категорий и тегов. А необходимо, что бы возвращались содержащие категории и теги из наборов + другие (не меньше, чем из поисковых наборов).
Я упростил задачу, нужно только по набору тегов искать.
У меня напрашивается такой код:
.Where(x => tagIDs.All(c => x.PubTags.Any(p => p.TagPtr.Equals(c))));
где, tagIDs = List() — список обязательных тегов
Но выдает ошибку:
An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
Additional information: Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
Спасибо, рабочий вариант.
Я докрутил еще вариант решения, нужно понять, что оптимальнее (по explan — решение с join содержит меньше операций, но я не понял, как сравнить производительность).
select * from Pubs
where PubId in
(
(select PubId from pubs inner join PubNodes on PubId = PubNodes.PubPtr
where PubNodes.NodePtr = A)
intersect
(select PubId from pubs inner join PubTargets on PubId = PubTargets.PubPtr
where PubTargets.TargetPtr = B)
intersect
(select PubId from pubs inner join PubSections on PubId = PubSections.PubPtr
where PubSections.SectionPtr = C)
)
По всей видимости не то. Мне не нужно собирать проекты, для этого я использую VS. Мне нужно создавать проекты. То есть, условно говоря, введя имя Solution1.Appl1 я должен получить солюшн из трех пустых проектов с установленными связями между проектами (из примера выше).
Правильно ли я все понял?
public void MakeCopys(string path)
{
var di = new DirectoryInfo(path);
Parallel.ForEach(di.GetFiles("*.jpg"), (file) =>
{
MakeThumbnails(file);
});
}
Подключил iTextSharp через Nuget. Вроде про деньги ничего не спросил. Но как конвертировать непонятно. Нашел один пример, но он белиберду выдает на выходе
using (var sr = new StreamReader(fileRes))
using (var fs = new FileStream(filePdf, FileMode.Create))
using (var pdf = new iTextSharp.text.Document())
{
PdfWriter.GetInstance(pdf, fs);
pdf.Open();
pdf.Add(new iTextSharp.text.Paragraph(sr.ReadToEnd()));
pdf.Close();
}
Спасибо за варианты, рабочее решение, задачу решает.
Но для общей ситуации без привязки к моему примеру — есть ли возможность селекции делегатов в одну строку? Типа такого: filter = userId.hasValue? filter1 : filter2;, но чтобы использовались не ранее объявленные делегаты, а непосредственно лямбда-выражения. Выражения могут быть абстрактно разными, без возможности объединения двух логических выражений в одно.
.Where(x => tagIDs.All(c => x.PubTags.Any(p => p.TagPtr == c)));
Спасибо за наводку.