這是當這種類型的問題,面對我做了什麼:
var rooms = bookings
.Select(b => b.Room)
.Distinct()
.OrderBy(r => r)
.ToArray();
var query = (
from b in bookings
group b by b.Date into gbs
let l = gbs.ToLookup(gb => gb.Room, gb => gb.Count)
select new
{
Date = gbs.Key,
RoomCounts = rooms.Select(r => l[r].Sum()).ToArray(),
}).ToArray();
這實質上產生以下數組:
var rooms = new []
{
"Room A", "Room B", "Room C", "Room D", "Room E", "Room F",
};
var query = new []
{
new
{
Date = new DateTime(2011, 01, 01),
RoomCounts = new [] { 2, 5, 3, 2, 1, 5 }
},
new
{
Date = new DateTime(2011, 01, 02),
RoomCounts = new [] { 3, 5, 2, 5, 2, 2 }
},
new
{
Date = new DateTime(2011, 01, 03),
RoomCounts = new [] { 2, 5, 2, 0, 0, 0 }
},
};
的RoomCounts
陣列都長度與rooms
陣列相同,每個索引位置的值與rooms
陣列中的房間相匹配。
它通常是相當可行的。
另一種方法是創建代表網格有點像一個電子表格數組的數組。
var query2 = (new object[]
{
(new object[] { "Date" })
.Concat(rooms.Cast<object>())
.ToArray()
}).Concat(
from b in bookings
group b by b.Date into gbs
let l = gbs.ToLookup(gb => gb.Room, gb => gb.Count)
select (new object[] { gbs.Key })
.Concat(rooms.Select(r => l[r].Sum()).Cast<object>())
.ToArray())
.ToArray();
這將產生以下:
var q2 = new object[]
{
new object[] {
"Date", "Room A", "Room B", "Room C", "Room D", "Room E", "Room F" },
new object[] { new DateTime(2011, 01, 01), 2, 5, 3, 2, 1, 5 },
new object[] { new DateTime(2011, 01, 02), 3, 5, 2, 5, 2, 2 },
new object[] { new DateTime(2011, 01, 03), 2, 5, 2, 0, 0, 0 },
};
的替代選擇,在情況下,查詢看起來有點毛茸茸的,是要做到這一點:
Func<object, IEnumerable, object[]> prepend = (o, os) =>
(new object[] { o }).Concat(os.Cast<object>()).ToArray();
Func<object[], IEnumerable<object[]>, object[][]> prepends = (o, os) =>
(new object[][] { o }).Concat(os).ToArray();
var query2 = prepends(prepend("Date", rooms),
from b in bookings
group b by b.Date into gbs
let l = gbs.ToLookup(gb => gb.Room, gb => gb.Count)
select prepend(gbs.Key, rooms.Select(r => l[r].Sum())));
這種形式的查詢仍然產生相同的對象網格,但它比第一個表單更具可讀性,恕我直言。
我希望這會有所幫助。
謝謝,我試圖thesee – user918064
謝謝,我嘗試了這些。我將結果綁定到Silverlight Datagrid。選項1只顯示7行,包含沒有文字的日期和房間數列。選項2預訂一節提出了在.Concat錯誤(從B說對象不包含CONCAT定義。選擇三個看起來最好,但分割每行到一個數組,所以我不能看我怎麼可以綁定,爲數據網格與itemsource屬性?我可能錯過了一些明顯的東西? – user918064