Как динамично добавить операцию ИЛИ ТУДА, ГДЕ пункт в LINQ

Не зная данных примера и / или ожидаемого результата.
Я предполагаю, что вы хотите 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
29
задан Mehrdad Afshari 23 April 2009 в 15:45
поделиться

3 ответа

Вы можете использовать класс 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);

Странное поведение LinqToSql

33
ответ дан 28 November 2019 в 01:58
поделиться

Либо создайте выражение самостоятельно, либо посмотрите на другой маршрут.

Предполагая, что возможные теги - это набор тегов, вы можете использовать замыкание и объединение, чтобы найти совпадения. Это должно найти любые песни с хотя бы одним тегом в возможных тегах:

allSongMatches = allSongMatches.Where(s => (select t from s.Tags
                                            join tt from possibleTags
                                                on t == tt
                                            select t).Count() > 0)
0
ответ дан 28 November 2019 в 01:58
поделиться

Есть другой, несколько более простой способ, позволяющий добиться этого. В блоге 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 здесь.

0
ответ дан 28 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: