摘要:LINQ Join(資料物件關聯) ,C#,by-藍小伙
現在要來演示,資料物件間如何來做關聯的簡單範例:
首先先建立資料物件類別
//員工類別
class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int OrganizationID { get; set; }
}
//組織類別
class Organization
{
public string Name { get; set; }
public int OrganizationID { get; set; }
}
ok 基本類別建立完畢後。
來做些假數據,才可順利跑完範例。(貼在主程序類別內即可)
static List<Employee> _EmployeeList = new List<Employee>()
{
new Employee(){Name = "ACord",OrganizationID = 0 },
new Employee(){Name="Tina",OrganizationID =0},
new Employee(){Name = "Jorad",OrganizationID =3}
};
static List<Organization> _organizationList = new List<Organization>()
{
new Organization(){Name = "ABB", OrganizationID = 0},
new Organization(){Name="HTC",OrganizationID = 1},
new Organization(){Name = "Nokia",OrganizationID = 2}
};
從類別中會發現Employee僅有OrganizationID (組織ID),故Employee.OrganizationID 會與Organization.OrganizationID 關聯。
接下來我們的需求是要將各人員的名稱與組織名稱,依人員名稱順序顯示
所以我們需要再建立一個顯示類別
//用於顯示的類別
class Display
{
public string PersonName { get; set; }
public string OrganizationName { get;set; }
}
那麼接下來在完成主程序
static void Main(string[] args)
{
//LINQ語法
//from 自定義變數名稱 in 資料陣列
var empJoinCompanyList = from person in _EmployeeList
//join 自定義變數名稱 in 資料陣列(要關聯的) on 條件(跟MSSQL 的on使用一樣)
join organization in _organizationList on person.OrganizationID equals organization.OrganizationID
let name = person.Name //let 選擇類別內的變數名稱
where name != null //設定要join的條件,若為null 則不join
let s = organization.Name //let 選擇類別內的變數名稱
where organization.OrganizationID < 3 //設定要join的條件,若>3 則不join
//設定要join的條件,若為null 則不join
select new Display() { PersonName = name, OrganizationName = s };
////同以上LINQ語法功能,以下有使用一些Lamda表達式
//var empJoinCompanyList=new List<Display>();
//foreach (var person in _EmployeeList)
//{
// var joinOrganization =
// //SingleOrDefault只取一個若取不到直則給Default
// _organizationList.SingleOrDefault(
// org => org.OrganizationID == person.OrganizationID);
// if (joinOrganization==null)
// {
// continue;
// }
// if (person.Name != null && joinOrganization.OrganizationID<3)
// {
// empJoinCompanyList.Add(new Display() { PersonName = person.Name, OrganizationName = joinOrganization.Name });
// }
//}
foreach (var item in empJoinCompanyList)
{
Console.WriteLine(item.PersonName+" "+item.OrganizationName);
}
Console.ReadKey();
}
小語:
在撰寫程式時不需要LINQ與表達式,一樣可把工作順利達成。但是LINQ與表達式可以防止你在撰寫條件時程式碼爆炸的可能性,能大幅的減少原碼的字數,至於原碼的可視度小伙認為是個人經驗的問題,小伙認為還挺簡單扼要的。
By-藍小伙
(若有錯誤或是更好的方法,煩請不吝指教,歡迎交流。 By-藍小伙)