Здравствуйте, помогите пожалуйста справиться с запросом.
Сам он такой:
SELECT *
FROM [DB].[dbo].[items]
WHERE id IN(
SELECT TOP (20) itemid
FROM [DB].[dbo].[xref]
WHERE EXISTS(
SELECT id
FROM [DB].[dbo].[vars]
WHERE wordid = id AND ( word = 'WORD1' OR word = 'WORD2')
)
GROUP BY itemid
ORDER BY COUNT(itemid) DESC, SUM(weight) DESC
)
Вот что у меня вышло но работает не так как надо что конечно логично(в коде я убрал различные проверки что бы его сократить)... Помогите сделать правильно
string[] searchArray = {"WORD1","WORD2"};
int[] searchedVars = db.vars.Where(o => searchArray.Contains(o.word)).Select(o => o.id).ToArray();
int tmpword = searchedVars[0];
Expression<Func<xref, bool>> whExp = o => o.wordid == tmpword;
int searchedVarsCount = searchedVars.Count();
for (int i = 1; i < searchedVarsCount; i++)
{
tmpword = searchedVars[i];
whExp = whExp.Or(o => o.wordid == tmpword);
}
whExp = whExp.Expand();
int[] SearchedIndexes = db.xref.Where(whExp)
.GroupBy(s => s.itemid)
.Select(g => new
{
ItemId = g.Key,
Score = g.Sum(s => s.weight),
CountItemId = g.Count()
})
.OrderByDescending(r => r.CountItemId)
.ThenByDescending(r => r.Score)
.Skip(0)
.Take(limit)
.Select(o => o.ItemId)
.ToArray();
List<items> Searched = db.items.Where(o => SearchedIndexes.Contains(o.id)).ToList();