Read
ตัวอย่างข้อมูล
public class SelectedFilter{
public int Id { get; set; }
public string? CampusId { get; set; }
public string? CFacultyId { get; set; }
public string? CDeptId { get; set; }
public string? CSectionId { get; set; }
}
public static List<SelectedFilter> SelectedMockupList = new()
{
new()
{
Id = 1,
CampusId = "01",
CFacultyId = "A1",
CDeptId = "B1",
CSectionId = "C1",
},
{
Id = 2,
CampusId = "02",
CFacultyId = "A2",
CDeptId = "B2",
CSectionId = "C2",
},
{
Id = 3,
CampusId = "03",
CFacultyId = "A3",
CDeptId = "B3",
CSectionId = "C3",
},
{
Id = 4,
CampusId = "04",
CFacultyId = "A4",
CDeptId = "B4",
CSectionId = "C4",
},
{
Id = 5,
CampusId = "05",
CFacultyId = "A5",
CDeptId = "B5",
CSectionId = "C5",
},
{
Id = 6,
CampusId = "05",
CFacultyId = "A5-1",
CDeptId = "B5-1",
CSectionId = "C5-1",
},
{
Id = 7,
CampusId = "05",
CFacultyId = "A5-2",
CDeptId = "B5-2",
CSectionId = "C5-2",
},
};
จากกลุ่มข้อมูลเราสามารถใช้คำสั่ง LINQ เพื่อจัดการด้วยวิธีการ Asyn ได้ดังนี้
Filtering
ใช้สำหรับคัดกรองข้อมูลเฉพาะที่เราต้องการเท่านั้น ซึ่งคำสั่งที่สามารถใช้งานได้ ดังตัวอย่าง ในตาราง A
คำสั่ง | ใช้สำหรับ | ตัวอย่าง | ผลลัพธ์ |
Where | กรองข้อมูล | strQry = ข้อมูลของวิทยาเขตรหัส 01 หรือรหัส 02 | |
Select | ดึงข้อมูล | ||
Distinct | เอาเฉพาะตัวที่ซ้ำมาแค่ตัวเดียว | ได้ข้อมูลที่มีเฉพาะข้อมูลที่ไม่ซ้ำกัน | |
Take | เอาข้อมูล | ||
Skip | ข้ามข้อมูลไปกี่ข้อมูล |
Ordering
คำสั่ง | ใช้สำหรับ | ตัวอย่าง | ผลลัพธ์ |
OrderBy | เรียงลำดับจากน้อยไปมาก (A-Z) | ||
OrderByDescending | เรียงลำดับจากมากไปน้อย (Z-A) |
Grouping
คำสั่ง | ใช้สำหรับ | ตัวอย่าง | ผลลัพธ์ |
GroupBy | จัดกลุ่มข้อมูลตาม.... |
Aggregate function
คำสั่ง | ใช้สำหรับ | ตัวอย่าง | ผลลัพธ์ |
Count | |||
Sum | |||
Min | |||
Max | |||
Average | |||
FirstOrDefault | |||
Contain |
คำสั่งในการแปลงกลุ่มข้อมูล
คำสั่ง | ใช้สำหรับ | ตัวอย่าง | ผลลัพธ์ |
ContToList | |||
ToHashSet | |||
ToArray | |||
ToDictionary |
FirstOrDefaultAsync()
ใช้สำหรับการดึงข้อมูล เป็น
model? คือ ค่านี้มีโอกาสที่เป็น null ได้
ToListAsync()
ToArrayAsync()
Where()
สามารถเขียนได้หลาย Where() ซึ่ง Where() จะเท่าเท่ากับ And ใน sql
model? result = await context.table
.Where(c => c.Id == 1)
.Where(c => c.name == "นายก")
.ToListAsync()
Contains()
ค้นหาคำโดยการใช้ keyword ในการค้นหา
public async Task<List<model>> ContainsFunction(string keyword){
List<model> result = await context.table
.Where(c => c.fullName.Contains(keyword))
.ToArrayAsync();
}
Distinct() DistinctBy()
Distinct() จะตัดตัวซ้ำทั้ง table
DistinctBy() จะตัดตัวซ้ำเฉพาะ field ที่เลือก
IQueryable
ใช้ในการดึงข้อมูลที่มีปริมาณมาก เช่น การค้นหาข้อมูลต่างๆ ไม่ว่าจะเป็นการค้นหารายชื่อ น.ศ วิทยาเขต หรือรายชื่อบุคลากร ในวิทยาเขตเป็นต้น
private IEnumerable<object> LoadAllFiles(int skip, int take, string fileRevision, string fileNumber)
{
using (var context = new LINQEntities())
{
//Select and perform join on the needed tables and build an IQueryable collection
IQueryable<FileRepository> fileCollection = context.FileRepository;
//Build queries dynamically over Queryable collection
if(!string.IsNullOrEmpty(fileRevision))
fileCollection = fileCollection.Where(a => a.FileRevision == fileRevision && a.IsDeleted == false);
//Build queries dynamically over Queryable collection
if (!string.IsNullOrEmpty(fileNumber))
fileCollection = fileCollection.Where(a => a.FileRevision == fileNumber && a.IsDeleted == false);
//Apply skip and take and load records
return fileCollection.OrderBy(a=>a.Id).Skip(()=>skip).Take(()=>take).Select(a=>new
{
FileIssuedBy=a.FileIssuedBy
}).ToList();
}
}
skip() take()
ข้อควรระวัง
var skip = 0;
var take = 10;
List<model> result = await context.table
.Skip(skip)
.Take(take)
.ToListAsync();
แนะนำให้ใช้
var skip = 0;
var take = 10;
List<model> result = await context.table
.Skip(()=>skip)
.Take(()=>take)
.ToListAsync();
OrderBy() ThenBy()
OrderBy() คือการเรียงลำดับ จากน้อยไปมาก A-Z (ASC)
ThenBy ใช้กรณีที่มีการ OrderBy มากกว่า 1 ตัว
OrderByDescending() ThenByDescending()
OrderByDescending() คือการเรียงลำดับ จากมากไปน้อย Z-A (DESC)
ThenByDescending ใช้กรณีที่มีการ OrderByDescending มากกว่า 1 ตัว
List<model> result = await context.table
.OrderByDescending(a => a.Id)
.ThenByDescending(a => a.name)
.ToListAsync();
ToDictionaryAsync()
Dictionary
[int] คือ id ในการ map การใช้งาน
[model] คือ ค่าที่ได้จากการ map
Dictionary<int, model> result = await context.table.ToDictionaryAsync(c => c.id, c => c);
/// การเรียกใช้งาน
model data = result[1];
string name = data.name; // or (result[1]).name
AsNoTracking()
การใช้งานแนะนำให้ใช้กับ การดึงข้อมูลที่มาจาก Table View
ข้อควรระวัง หากมีการประกาศใน Table คือ data ที่ได้มาจะไม่มีการ Tracking Data จาก Table กลับมา [จะไม่สามารถนำ Data ที่ได้มาไป Updat เข้าฐานข้อมูลได้โดยตรง]
model? result = await context.viewTable
.Where(c => c.id == 1)
.AsNoTracking()
.FirstOrDefaultAsync();
Select
กรณีต้องการใช้ข้อมูลบ้าง column แนะนำให้เยกเฉพาะ column ที่ต้องการเท่านั้น
เลือกข้อมูลที่จะใช้งานโดยที่สร้าง model ใหม่มารับค่า
// public class SelectedFilter{
// public string? CampusId { get; set; }
// public string? CFacultyId { get; set; }
// public string? CDeptId { get; set; }
// public string? CSectionId { get; set; }
// }
List<SelectedFilter> result = await context.table
.select(x => new SelectedFilter(){
CampusId = x.CampusId,
CFacultyId = x.CFacultyId,
CDeptId = x.CDeptId,
CSectionId = x.CSectionId,
})
.ToListAsync()
Aggregate function
SumAsync
MaxAsync
MinAsync
AverageAsync