條件:
在一Table中有多個群組類別資料,取每一類別中日期最大的
sql:
select * from (
select b.* ,ROW_NUMBER() over (partition by b.商品類別 order by b.價格生效日 desc)as Sort
from (select * from 商品類別價格Table where DATEDIFF(DAYOFYEAR,
價格生效日 ,GETDATE())>0) b)a
where a.Sort='1'
解說:
從上一SQL可發現同一種商品類別會有多個價格生效日,上一列子要取出生效日在今天(不含今天)以前日期最接近今天的一筆
SQL轉成Linq:
var query=context.商品類別價格Table.Where(s=>System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(s.價格生效日,DateTime.Now)>0).ToList().OrderByDescending(s => s.價格生效日).GroupBy(s => 商品類別).Select(
b => new {b, cout = b.Count()}).SelectMany(
c =>
c.b.Select(d => d).Zip(Enumerable.Range(1, c.cout),
(j, i) => new { j.PriceId, j.商品類別, j.價格生效日, Sort = i })).Where(s => s.Sort == 1).ToList();
參考資料:
http://pastebin.com/7SCG76uW
Zip用法...
http://msdn.microsoft.com/zh-tw/library/dd267698.aspx