Có phương thức nào trong Linq mà bạn có thể sử dụng để xây dựng các chuỗi SQL như "... where (a = 1) OR (a = 2)" không?
Câu trả lời:
Bạn chắc chắn có thể làm điều đó trong mệnh đề Where (phương thức mở rộng). Tuy nhiên, nếu bạn cần tạo một truy vấn phức tạp động, bạn có thể sử dụng PredicateBuilder .
var query = collection.Where( c => c.A == 1 || c.B == 2 );
Hoặc sử dụng PredicateBuilder
var predicate = PredicateBuilder.False<Foo>();
predicate = predicate.Or( f => f.A == 1 );
if (allowB)
{
predicate = predicate.Or( f => f.B == 1 );
}
var query = collection.Where( predicate );
Bạn có thể sử dụng toán tử boolean .NET tiêu chuẩn trong mệnh đề where:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
trong .Where()
cuộc gọi của bạn, hãy sử dụng toán tử Boolean 'Or' tiêu chuẩn ||
,.
var query = items.Where(item => (item == 1 || item == 2));
Tất cả lệnh gọi Where là so sánh Boolean trên bất kỳ thứ gì bạn muốn, vì vậy bạn có thể điền vào nó với nhiều logic có điều kiện tùy thích.
Nếu bạn không biết số lượng tham số, bạn có thể sử dụng cái này:
Dữ liệu mẫu
var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
sampledata["a"] = "A";
sampledata["b"] = "B";
sampledata["c"] = "C";
sampledata["d"] = "D";
Mã
var query = sampledata.AsQueryable();
var firstItemKey = sampledata.FirstOrDefault().Key;
var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable();
foreach (var parameter in parameters.Skip(1))
{
queryresult=queryresult.Concat(query.Where(x => x.Key == parameter));
}
var result = queryresult.ToList();
Điều này đã được tích hợp vào .net ngay bây giờ, không chắc chắn nếu trước đây không. Với một truy vấn Linq hiện có, bạn có thể thêm mệnh đề where lấy một mảng chuỗi (Chuỗi tìm kiếm) và kiểm tra xem có bất kỳ chuỗi nào trong số đó khớp với bất kỳ đối tượng nào trong tập hợp bạn đang tìm kiếm hay không. Sử dụng ToLower () chỉ đảm bảo rằng bạn tránh phân biệt chữ hoa chữ thường trong các truy vấn SQL.
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
Bạn có thể làm điều tương tự đối với vị từ 'và' bằng cách khớp tất cả các từ trong mảng với đối tượng của bộ sưu tập.
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
Trong ví dụ này, tôi tương quan với từng đối tượng trong một tập hợp và tương quan với từng chuỗi trong mảng Chuỗi tìm kiếm.
||
và muốn một cái gì đó năng động, nhưa=a.where(hour=> hour<20); if(weekend) a=a.where(hour=> hour>6);
. Bạn có thể muốn nhà nước rõ ràng hơn ...