Trước hết, đó không phải là truy vấn hợp lệ. Khi bạn sử dụng cú pháp truy vấn (from blah in blah ...
), bạn phải có mệnh đề select
. Nó nên được như thế hơn:
var manager =
(from n in DataContext.Manager
where n.Name == "Jones"
select n).FirstOrDefault();
Để trả lời câu hỏi của bạn, gọi FirstOrDefault()
trên truy vấn của bạn sẽ trả lại kết quả đầu tiên của truy vấn hoặc giá trị mặc định cho các loại hình (có khả năng nhất null
trong trường hợp này). Đối với những gì bạn đang đi, điều này sẽ không được sử dụng đầy đủ vì truy vấn có thể chứa nhiều hơn một kết quả.
Nếu bạn muốn xác minh rằng truy vấn chỉ trả về một kết quả, bạn nên sử dụng phương thức SingleOrDefault()
để thay thế. Nó sẽ trả về một mục do truy vấn tạo ra, giá trị mặc định null
nếu nó trống hoặc ném một ngoại lệ nếu có nhiều hơn một mục.
Nếu bạn không muốn ném ngoại lệ, có thể dễ dàng ném hai kết quả đầu tiên vào danh sách và xác minh rằng bạn chỉ có một kết quả.
var managers =
(from m in DataContext.Manager
where m.Name == "Jones"
select m).Take(2).ToList();
if (managers.Count == 1)
{
// success!
var manager = managers.First();
// do something with manager
}
else
{
// error
}
Nguồn
2012-01-16 22:08:24
Xem tài liệu về phương pháp FirstOrDefault. Nó trả về giá trị mặc định cho kiểu dữ liệu nếu không có kết quả. Nếu đó là một điều phải * không quá 1 * bản ghi vượt qua các tiêu chí truy vấn, sử dụng SingleOrDefault thay thế. –