質問
私は実験Linq、お困りの把握の分類.私はそれを通して複数のチュートリアルが何らかの理由です。
例えば、言い表SiteStats)複数のサイトIdを格納する、数多くの来場者によってアクセスの各サイトの額は、過去30日間とします。
╔════════╦═════════════╦════════╦══════╗
║ SiteId ║ VisitorType ║ Last30 ║ Total║
╠════════╬═════════════╬════════╬══════╣
║ 1 ║ 1 ║ 10 ║ 100 ║
║ 1 ║ 2 ║ 40 ║ 140 ║
║ 2 ║ 1 ║ 20 ║ 180 ║
╚════════╩═════════════╩════════╩══════╝
アプリケーションで、すぐにカウントSiteID1以下の
SELECT SiteId,
SUM(Last30) AS Last30Sum
FROM Sites
WHERE SiteId = 1
GROUP BY SiteId
うべきではな行してもらいました。
╔════════╦════════════╗
║ SiteId ║ Last30Total║
╠════════╬════════════╣
║ 1 ║ 50 ║
╚════════╩════════════╝
しかしくなったどこの結果を利用Linq.私た:
var statsRecord = from ss in db.SiteStats
where ss.SiteId == siteId
group ss by ss.SiteId into ss
select ss;
がんに戻って取得することができ、合計のようにな statsRecord.Last30
で誰か教えてくださいがいが悪いのでしょうか。のお役に立てるようよろしくお願いいたします。
解決
実際には、トーマス-コードのままでとさせていただきます。succint用のラムダ式
var totals =
from s in sites
group s by s.SiteID into grouped
select new
{
SiteID = grouped.Key,
Last30Sum = grouped.Sum( s => s.Last30 )
};
を拡張手法の必要がなく入れ子LINQ動作します。
当LINQ101例- http://msdn.microsoft.com/en-us/vcsharp/aa336747.aspx#sumGrouped
他のヒント
最も簡単な方法のための私的利用でき-メモリオブジェクトで何が起きています。LINQ to SQLくことができるとLINQクエリおよび翻訳で適切なSQL.
public class Site
{
static void Main()
{
List<Site> sites = new List<Site>()
{
new Site() { SiteID = 1, VisitorType = 1, Last30 = 10, Total = 100, },
new Site() { SiteID = 1, VisitorType = 2, Last30 = 40, Total = 140, },
new Site() { SiteID = 2, VisitorType = 1, Last30 = 20, Total = 180, },
};
var totals =
from s in sites
group s by s.SiteID into grouped
select new
{
SiteID = grouped.Key,
Last30Sum =
(from value in grouped
select value.Last30).Sum(),
};
foreach (var total in totals)
{
Console.WriteLine("Site: {0}, Last30Sum: {1}", total.SiteID, total.Last30Sum);
}
}
public int SiteID { get; set; }
public int VisitorType { get; set; }
public int Last30 { get; set; }
public int Total { get; set; }
}
所属していません StackOverflow