LINQ 三 使用 LINQ 進行資料轉換

2021-06-26 10:00:49 字數 4315 閱讀 5358

可以使用 linq 查詢來建立包含多個輸入序列的元素的輸出序列。

下面的示例演示如何組合兩個記憶體中的資料結構,但組合來自 xml 或 sql 或資料集源的資料時可應用相同的原則。

假定下面兩種類型別:

c#

class student
public

string last

public

int id

public

string street

public

string city

public list scores;
}
class teacher
public

string last

public

int id

public

string city

}
下面的示例演示該查詢:

c#

class datatransformations
},
new student },
new student },
};
// create the second data source.
listteachers = new list()
,
new teacher ,
new teacher
};
// create the query.
var peopleinseattle = (from student in students
where student.city == "seattle"
select student.last)
.concat(from teacher in teachers
where teacher.city == "seattle"
select teacher.last);
console.writeline("the following students and teachers live in seattle:");
// execute the query.
foreach (var person in peopleinseattle)
console.writeline("press any key to exit.");
console.readkey();
}
}
/* output:
the following students and teachers live in seattle:
omelchenko
beebe
*/
選擇源序列中的各個元素的子集有兩種主要方法:

1.    

若要只選擇源元素的乙個成員,請使用點運算。

在下面的示例中,假定

customer

物件包含幾個公共屬性,其中包括名為

city

的字串。

在執行此查詢時,此查詢將生成字串輸出序列。

2.  var query = from cust in customers
3.              select cust.city;
4.    

若要建立包含源元素的多個屬性的元素,可以使用具有命名物件或匿名型別的物件初始值設定項。

下面的示例演示如何使用匿名型別來封裝各個

customer

元素的兩個屬性:

5.  var query = from cust in customer
select new ;
通過 linq 查詢,可以輕鬆地在記憶體中的資料結構、sql 資料庫、ado.net 資料集和xml 流或文件之間轉換資料。

下面的示例將記憶體中的資料結構中的物件轉換為 xml 元素。 c#

class xmltransform
},
new student },
new student },
};
// create the query.
var studentstoxml = new xelement("root",
from student in students
let x = string.format(",,,", student.scores[0],
student.scores[1], student.scores[2], student.scores[3])
select

new xelement("student",

new xelement("first", student.first),
new xelement("last", student.last),
new xelement("scores", x)
) // end "student"
); // end "root"
// execute the query.
console.writeline(studentstoxml);
// keep the console open in debug mode.
console.writeline("press any key to exit.");
console.readkey();
}
}
此**生成下面的 xml 輸出:

< root>
svetlana
omelchenko
97,92,81,60
claire
o'donnell
75,84,91,39
sven
mortensen
88,94,65,91
輸出序列可能不包含源序列的任何元素或元素屬性。

輸出可能是通過將源元素用作輸入引數計算出的值的序列。

在執行下面這個簡單查詢時,此查詢會輸出乙個字串序列,該序列值表示根據

double

型別的元素的源序列進行的計算。

說明

如果查詢將轉換為某個其他域,則不支援在查詢表示式中呼叫方法。

例如,不能在 linq to sql 中呼叫一般 c# 方法,因為 sql server 沒有該方法的上下文。

但是,可以將儲存過程對映到方法,然後呼叫方法。

有關更多資訊,請參見儲存過程

[linq to sql]。c#

class formatquery
;
// query.
ienumerable query =
from rad in radii
select string.format("area = ", (rad * rad) * 3.14);
// query execution.
foreach (string s in query)
console.writeline(s);
// keep the console open in debug mode.
console.writeline("press any key to exit.");
console.readkey();
}
}
/* output:
area = 3.14
area = 12.56
area = 28.26
*/

LINQ 進行資料轉換

可以使用 linq 查詢建立包含元素的輸出序列,這些元素來自多個輸入序列。以下示例演示如何組合兩個記憶體中資料結構,但相同的原則可應用於組合來自 xml 或 sql 或資料集源的資料。假設以下兩種類型別 class student public string last public int id p...

使用linq 進行Group by 查詢

上圖是資料庫表 需求是要統計出來 不合格 top 10 其中 ngcode 200代表合格 其他均不合格 sql 語句 如下 select top 10 ngcode as defectcode count 1 as count from dbo tblpassstationdata where n...

LinQ使用積累

1.用linq查詢datatable中的行是否重複 intcount1 from p indt.asenumerable select p distinct count intcount2 from p indt.asenumerable select p count if count1 count...