[英]c# LINQ query filling a Tuple List
我需要在Linq to Entities的幫助下,使用MSSQL數據庫中的值填充元組列表。 下面的代碼段將有助於獲得一個元組列表,其中1個數據庫行反映了1個元組條目。 如果為calculateData有3行,我們將在該列表中使用Field1
到Field4
創建3個元組條目。
下面的代碼使之成為可能:
var queryResult = (from a in calculate
join b in calculateData on a.Id equals b.CalcId into c
where a.SpecialID == 2023 && a.VersionId == 1
orderby a.InternalOrderNr ascending
select new
{
a.Field1,
a.Field2,
a.Field3,
myField4 = c.Select(d => new {
d.Field1, d.Field2, d.Field3, d.Field4})
}).ToList();
var result = queryResult.Select(r => new Storage
{
myField1 = r.Field1,
myField2 = r.Field2,
myField3 = r.Field3,
myField4 = r.myField4.Select(t => new Tuple<int,int,decimal,string>
(
t.Field1,
t.Field2,
t.Field3,
t.Field4)
).ToList()
});
return result;
但是我需要一點不同。 我在列表中總共9個元組條目中需要這3個數據庫行。 例:
數據庫每行包含4列(Column1,Column2,Column3,Column4)。
我們有3行。
元組1:DB-Row1和Column1,Column2、0、0
元組2:DB-Row1和Columm2,列3,0,1
元組3:DB-Row1和Columm3,列4,0,2
元組4:DB-Row2和Column1,Column2、1、0
元組5:DB-Row2和Columm2,列3,1,1
元組6:DB-Row2和Columm3,列4,1,2
元組7:DB-Row3和Column1,Column2、2、0
元組8:DB-Row3和Columm2,第3列,2,1
元組9:DB-Row3和Columm3,第4列,2,2
所以這里的區別在於,數據庫行和元組之間沒有1:1映射。 我需要從1個數據庫行中創建幾個元組。 在上面的示例中,我們有3個Tuple條目,但它可以不同,也可以更多或更少。
我想這樣的事情應該適合您:
var queryResult = (from a in calculate
join b in calculateData on a.Id equals b.CalcId into c
where a.SpecialID == 2023 && a.VersionId == 1
orderby a.InternalOrderNr ascending
select new
{
a.Field1,
a.Field2,
a.Field3,
myField4 = c.Select(d => new {
d.Field1, d.Field2,
d.Field3, d.Field4
d.Field5, d.Field6})
}).ToList();
var result = queryResult.Select(r => new Storage
{
myField1 = r.Field1,
myField2 = r.Field2,
myField3 = r.Field3,
myField4 = r.myField4.SelectMany(t => new []
{
Tuple<int,int>(t.Field1, t.Field2),
Tuple<int,int>(t.Field3, t.Field4),
Tuple<int,int>(t.Field5, t.Field6)
}).ToList()
}).ToList();
return result;
具有雙“ foreach”循環的備用版本應以相同的方式工作,但不會創建元組的冗余數組:
var queryResult = (from a in calculate
join b in calculateData on a.Id equals b.CalcId into c
where a.SpecialID == 2023 && a.VersionId == 1
orderby a.InternalOrderNr ascending
select new
{
a.Field1,
a.Field2,
a.Field3,
myField4 = c.Select(d => new {
d.Field1, d.Field2,
d.Field3, d.Field4
d.Field5, d.Field6})
}).ToList();
var result = new List<Storage>();
foreach(var row in queryResult){
var storage = new Strorage
{
myField1 = r.Field1,
myField2 = r.Field2,
myField3 = r.Field3,
myField4 = new List<Tuple<int,int>>()
};
foreach(var subRow in row.myField4)
{
storage.myField4.Add(Tuple<int,int>(t.Field1, t.Field2));
storage.myField4.Add(Tuple<int,int>(t.Field3, t.Field4));
storage.myField4.Add(Tuple<int,int>(t.Field5, t.Field6));
}
}
return result;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.