ฉันมี DataTable กับสองคอลัมน์แต่งและbookname
ฉันต้องการตรวจสอบว่าค่าสตริงที่ระบุAuthorมีอยู่แล้วใน DataTable หรือไม่ มีวิธีการตรวจสอบในตัวเช่นสำหรับ Arrays array.contains
หรือไม่?
ฉันมี DataTable กับสองคอลัมน์แต่งและbookname
ฉันต้องการตรวจสอบว่าค่าสตริงที่ระบุAuthorมีอยู่แล้วใน DataTable หรือไม่ มีวิธีการตรวจสอบในตัวเช่นสำหรับ Arrays array.contains
หรือไม่?
คำตอบ:
คุณสามารถใช้LINQ-to-DataSet
กับEnumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
อีกวิธีหนึ่งคือการใช้DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
ถาม: จะเกิดอะไรขึ้นถ้าเราไม่ทราบส่วนหัวของคอลัมน์และเราต้องการค้นหาว่ามีค่าเซลล์ใด
PEPSI
อยู่ในคอลัมน์ของแถวใดบ้าง ฉันสามารถวนลูปทั้งหมดเพื่อค้นหา แต่มีวิธีที่ดีกว่านี้หรือไม่? -
ได้คุณสามารถใช้แบบสอบถามนี้:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
เพื่ออ้างอิงและusing System.Linq;
ใช้คลาส
DataTable.Select
ไวยากรณ์แบบเก่ามีข้อ จำกัด ในขณะที่ LINQ สามารถใช้. NET framework แบบเต็มหรือวิธีการแบบกำหนดเองได้ ดังนั้นหากคุณติดอยู่กับ. NET 2 ที่คุณควรใช้DataTable.Select
ไม่เช่นนั้นฉันมักจะชอบ LINQ
tbl.Select()
จะเร็วกว่าวิธีอื่น ๆ อย่างมาก
คุณสามารถใช้ Linq สิ่งที่ต้องการ:
bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
เพิ่มในประโยคโดยใช้ของคุณ:
using System.Linq;
และเพิ่ม:
System.Data.DataSetExtensions
เพื่อการอ้างอิง
คุณควรจะใช้เมธอดDataTable.Select ()ได้ คุณสามารถให้เราเป็นแบบนี้
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
ฟังก์ชัน Select () ส่งคืนอาร์เรย์ของ DataRows สำหรับผลลัพธ์ที่ตรงกับคำสั่ง where
คุณสามารถตั้งค่าฐานข้อมูลเป็น IEnumberable และใช้ linq เพื่อตรวจสอบว่ามีค่าอยู่หรือไม่ ตรวจสอบลิงค์นี้
LINQ Query บน Datatable เพื่อตรวจสอบว่ามีการบันทึกหรือไม่
ตัวอย่างที่ให้คือ
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
คุณสามารถเสริมได้ที่ไหนด้วย
table.Any(t => t.Author == author);