C#のselect句でinto演算子を使ってクエリを設定する方法
C#のLINQでは、into演算子を使うことで、select句の結果を受け取り、その後さらにwhere句などでフィルタリングを続けることができます。本記事では、into演算子を使ってselect句内にクエリを設定する方法を、具体的なサンプルコードとともに解説します。
サンプルデータ:従業員リスト
まず、従業員情報を格納したリストを用意します。各従業員にはID、名前、点数(EmpMarks)、ランク(Rank)が含まれています。
IList<Employee> employee = new List<Employee>() {
new Employee() { EmpID = 1, EmpName = "Tom", EmpMarks = 90, Rank = 8} ,
new Employee() { EmpID = 2, EmpName = "Anne", EmpMarks = 60, Rank = 21 } ,
new Employee() { EmpID = 3, EmpName = "Jack", EmpMarks = 76, Rank = 18 } ,
new Employee() { EmpID = 4, EmpName = "Amy" , EmpMarks = 67, Rank = 20} ,
};into演算子を使ったクエリの書き方
ここでは、「ランクが5より大きく20未満」かつ「名前がkで終わる」従業員を抽出します。最初のselect句の結果をinto演算子で受け取り、続くwhere句で名前の条件を適用します。
var res = from e in employee where e.Rank > 5 where e.Rank < 20 select e into name where name.EmpName.EndsWith("k") select name;このようにinto演算子を使うことで、一つのクエリ式の中で段階的に絞り込みを行えます。通常のselect句はクエリの終わりを意味しますが、intoを使えば結果に別の範囲変数(ここではname)を与えて処理を継続できるのがポイントです。
完全なコード例
以下に、動作確認ができる完全なプログラムを示します。
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
IList<Employee> employee = new List<Employee>() {
new Employee() { EmpID = 1, EmpName = "Tom", EmpMarks = 90, Rank = 8} ,
new Employee() { EmpID = 2, EmpName = "Anne", EmpMarks = 60, Rank = 21 } ,
new Employee() { EmpID = 3, EmpName = "Jack", EmpMarks = 76, Rank = 18 } ,
new Employee() { EmpID = 4, EmpName = "Amy" , EmpMarks = 67, Rank = 20} ,
};
// ランクが5より大きく20未満で、名前がkで終わる従業員を抽出
var res = from e in employee
where e.Rank > 5
where e.Rank < 20
select e
into name
where name.EmpName.EndsWith("k")
select name;
foreach (var emp in res) {
Console.WriteLine("Name: " + emp.EmpName);
Console.WriteLine("Marks: " + emp.EmpMarks);
}
}
}
public class Employee {
public int EmpID { get; set; }
public string EmpName { get; set; }
public int EmpMarks { get; set; }
public int Rank { get; set; }
}実行結果
このコードを実行すると、条件に一致するのはJackのみであるため、以下の出力が得られます。
Name: Jack Marks: 76
Tomはランクが8で条件を満たしますが名前がkで終わっておらず、Amyはランクが20のため除外され、Anneもランクが21で対象外となります。このように、into演算子を活用すれば複数の条件を段階的に組み合わせた柔軟なデータ抽出が可能になります。
-
C#のvolatileキーワードとは?マルチスレッドでの使い方を解説
C#のvolatileキーワードとはC#では、複数のスレッドが同じ変数へ同時にアクセスすることで発生する競合状態(レースコンディション)を軽減するために、volatileキーワードを使用できます。volatileを付けた変数は、コンパイラによるキャッシュなどの最適化が抑制され、常にメモリ上の最新の値が読み書きされることが保証されます。volatileの基本的な使い方publicな変数にvolatileキーワードを付ける例は以下の通りです。class Program { public volatile int a; public Program(int _a) {
-
C#における集約(Aggregation)とは?基本概念とコード例を解説
C#における集約(Aggregation)とは集約(Aggregation)とは、C#においてオブジェクト同士が持つ方向性のある関係を指す概念です。あるクラス(全体)が別のクラス(部分)を保持するという、「has-a」の関係として表現されます。例えば、従業員(Employee)と住所(Address)の関係が代表的な例です。従業員は1つの住所情報を持ちますが、住所そのものは従業員に依存せず独立して存在できる点が特徴です。集約の具体例:従業員と部署の関係もう一つわかりやすい例として、従業員と部署の関係を挙げられます。1人の従業員は1つの部署に所属しますが、1つの部署には複数の従業員が在籍できます