我有一個數據庫,可以將x,y座標對錶解構成特定的數據項。加入來自X,Y的項目Linq的座標
Coordinate
{
int X,
int Y,
int Value
}
如何在Linq中將這些座標重新加入表中?如果還有空的空間在數據庫(由-
表示):
Y
0 1 2
-------
0 | 4 6 7
X 1 | 9 - 7
2 | 6 3 5
如何處理,在LINQ?
我有一個數據庫,可以將x,y座標對錶解構成特定的數據項。加入來自X,Y的項目Linq的座標
Coordinate
{
int X,
int Y,
int Value
}
如何在Linq中將這些座標重新加入表中?如果還有空的空間在數據庫(由-
表示):
Y
0 1 2
-------
0 | 4 6 7
X 1 | 9 - 7
2 | 6 3 5
如何處理,在LINQ?
LINQ通常適用於處理結構化(一維)數據,如數據庫或XML文件,但我不認爲它會幫助您在需要創建二維數據結構時。
如果你只是想將數據加載到一個二維數組,比它可能無法得到比寫它的直接的方式好得多(使用Max
擴展方法從LINQ得到大小):
int[,] values =
new int[coords.Max(c => c.X) + 1, coords.Max(c => c.Y) + 1];
foreach(var c in coords)
values[c.X, c.Y] = c.Value;
如果你想這樣做的另一種方式圓 - 生成從二維數組座標,那麼你可以使用LINQ的Enumerable.Range
生成二維數組的索引和where
選擇包含一些實際的價值元素:
var coords = from i in Enumerable.Range(0, coords.GetLength(0))
from j in Enumerable.Range(0, coords.GetLength(1))
let v = coords[i, j]
where v != '-'
select new { X = i, Y = j, Value = Int32.Parse(v) }
我假設您將座標存儲在IEnumerable類中。然後,你可以寫爲
public static int ValueAt(this IEnumerable<Coordinate> enumeable, int X, int Y)
{
Coordinate c = enumeable.Where(W=>W.x==X && W.y==Y).SingleOrDefault(); //works as long as their are no duplicate entries...
if(c==null){return ....;} //Depends on how you want to handle nulls... may be return typr should be nullable<int> ?
return c.Value;
}
然後就可以調用coordinates.ValueAt的擴展功能,例如(1,0)等等
你是什麼意思表?你的意思是一個DataTable? – jsmith 2010-09-27 14:24:55
datatable很好,匿名類型很好,基本上任何對象類型都包含可以按行迭代的結構。我想最終在中繼器或gridview上使用它。 – George 2010-09-27 14:30:44