Не зная данных примера и / или ожидаемого результата.
Я предполагаю, что вы хотите PIVOT для parent_id и stage
С COUNT
SELECT
parent_id
, stage
, COUNT(CASE WHEN results = 'no' THEN 1 ELSE NULL END) AS stage_no_count
, COUNT(CASE WHEN results = 'yes' THEN 1 ELSE NULL END) AS stage_yes_count
FROM
stages
GROUP BY
parent_id
, stage
# if the order is important in the results
ORDER BY
parent_id ASC
С SUM
SELECT
parent_id
, stage
, SUM(CASE WHEN results = 'no' THEN 1 ELSE 0 END) AS stage_no_count
, SUM(CASE WHEN results = 'yes' THEN 1 ELSE 0 END) AS stage_yes_count
FROM
stages
GROUP BY
parent_id
, stage
# if the order is important in the results
ORDER BY
parent_id ASC
Вы можете использовать класс PredicateBuilder
:
var searchPredicate = PredicateBuilder.False<Songs>();
foreach(string str in strArray)
{
var closureVariable = str; // See the link below for the reason
searchPredicate =
searchPredicate.Or(SongsVar => SongsVar.Tags.Contains(closureVariable));
}
var allSongMatches = db.Songs.Where(searchPredicate);
Либо создайте выражение
самостоятельно, либо посмотрите на другой маршрут.
Предполагая, что возможные теги - это набор тегов, вы можете использовать замыкание и объединение, чтобы найти совпадения. Это должно найти любые песни с хотя бы одним тегом в возможных тегах:
allSongMatches = allSongMatches.Where(s => (select t from s.Tags
join tt from possibleTags
on t == tt
select t).Count() > 0)
Есть другой, несколько более простой способ, позволяющий добиться этого. В блоге ScottGu подробно рассказывается о динамической библиотеке linq, которую я раньше считал очень полезной. По сути, он генерирует запрос на основе переданной вами строки. Вот пример кода, который вы должны написать:
Dim Northwind As New NorthwindDataContext
Dim query = Northwind.Products _
.Where("CategoryID=2 AND UnitPrice>3") _
.OrderBy("SupplierId")
Gridview1.DataSource = query
Gridview1.DataBind()
Более подробную информацию можно найти в блоге scottgu здесь.