Как сделать следующее в LINQ - PullRequest
2 голосов
/ 21 июля 2009

У меня есть следующий SQL, как мне реализовать это в LINQ (c #, пожалуйста:))

SELECT     a.Category, a.Description, a.Item, a.[Value], a.Loading, a.MaxDiscount, MIN(b.EffectiveDate) AS FromDate, a.EffectiveDate AS EndDate, a.SortOrder,  a.ID
FROM List a   
LEFT OUTER JOIN List b ON a.[Value] = b.[Value] AND a.Category = b.Category AND a.Description = b.Description AND a.Item = b.Item AND a.EffectiveDate < b.EffectiveDate  
GROUP BY a.Category, a.Description, a.Item, a.[Value], a.Loading, a.MaxDiscount, a.SortOrder, a.EffectiveDate, a.ID  
HAVING      (a.Category = 'General') AND (a.Description = 'Cover') AND (a.EffectiveDate <= CONVERT(DATETIME, '2009-04-01 00:00:00', 102)) AND (MIN(b.EffectiveDate) >= CONVERT(DATETIME, '2009-04-01 00:00:00', 102) OR MIN(b.EffectiveDate) IS NULL) AND (a.Item = 'Type')
ORDER BY a.SortOrder

У меня есть следующее (с использованием SubSonic Linq)

var query = from a in List.All() join b in List.All() 
            on new {a.Value,a.Category ,a.Description,a.Item} 
            equals new {b.Value,b.Category ,b.Description,b.Item} into temp 

Я не знаю, как добавить a.EffectiveDate

Ответы [ 2 ]

0 голосов
/ 21 июля 2009

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

Все, что вы хотите сделать, это фильтр, поэтому все, что вам нужно сделать, это «где».

someDate = new DateTime(2009, 4, 1);

var query = 
from a in List
where a.Category == "General"
where a.Description == "Cover"
where a.Item == "Type"
where a.EffectiveDate < someDate
let minDate =
(
  from b in List
  where a.Value == b.Value
  where a.Category == b.Category
  where a.Description == b.Description
  where a.Item == b.Item
  where a.EffectiveDate < b.EffectiveDate
  orderby b.EffectiveDate
  select new DateTime? ( b.EffectiveDate )
).FirstOrDefault()
where !minDate.HasValue || someDate < minDate.Value
orderby a.SortOrder
select a;
0 голосов
/ 21 июля 2009

Я бы предложил вам создать SP (хранимая процедура) для вашего запроса и включить этот SP в файл DBML, чтобы вы могли обращаться к нему как к методу из DataContext объекта.

После того, как весь код понятен людям, сохранить его как можно проще:)

Нажмите здесь, чтобы узнать больше "Как вызвать хранимую процедуру в LINQ"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...