Tôi có một chuỗi có kích thước biến của chuỗi và tôi đang cố lập trình vòng qua mảng và khớp tất cả các hàng trong bảng có cột "Thẻ" chứa ít nhất một trong các chuỗi trong mảng. Dưới đây là một số mã giả:Cách tự động thêm toán tử OR vào mệnh đề WHERE trong LINQ
IQueryable<Songs> allSongMatches = musicDb.Songs; // all rows in the table
tôi có thể dễ dàng truy vấn lọc bảng này trên một tập hợp cố định các chuỗi, như thế này:
allSongMatches=allSongMatches.Where(SongsVar => SongsVar.Tags.Contains("foo1") || SongsVar.Tags.Contains("foo2") || SongsVar.Tags.Contains("foo3"));
Tuy nhiên, điều này không làm việc (tôi nhận được lỗi sau: "Một biểu thức lambda có thân xác nhận không thể được chuyển thành cây biểu thức")
allSongMatches = allSongMatches.Where(SongsVar =>
{
bool retVal = false;
foreach(string str in strArray)
{
retVal = retVal || SongsVar.Tags.Contains(str);
}
return retVal;
});
Ai có thể cho tôi biết chiến lược chính xác để thực hiện điều này không? Tôi vẫn còn mới với thế giới của LINQ :-)
Cảm ơn Mehrdad, giải pháp của bạn bước vào thời gian kỷ lục và làm việc như một nét duyên dáng! Tôi không biết về lớp PredicateBuilder. Thật là một tính năng tiện dụng! Tôi cũng đánh giá cao nhận xét của bạn về việc sử dụng biến tạm thời để giữ các chuỗi ... điều đó sẽ khiến tôi phát điên! Victor –
Bạn được chào đón! –
I Got Confused về biểu thức False để tạo var searchPredicate, Điều này cần phải sai? hoặc bất cứ điều gì khác sẽ phù hợp? (Nói về PredicateBuilder.False()) –
Daniel