جستجو Contains روی کلید های ترکیبی
نویسنده: میلاد احمدی مقدم
تاریخ: ۱۴۰۳/۰۶/۰۶ ۱۸:۰۹
آدرس: www.dntips.ir
اگر یک لیست رشته ایی داشته باشیم به راحتی میتونیم روی پایگاه داده جستجو کنیم:
var eyeColors = new List<string>
{
"Black", "Green", "Brown"
};
var specificUsers = _context.Users.Where(x => eyeColors.Contains(x.EyeColor)).ToList();حالا اگه لیست ما ترکیبی باشه این سرچ باید به چه صورت انجام بشه:
public class User
{
public string FullName { get; set; }
public string EyeColor { get; set; }
}
var customUsers = new List<User>
{
new User{FullName = "Ali Ahmadi", EyeColor = "Brown"},
new User{FullName = "Milad Rezaei", EyeColor = "Green"}
};
var specificUsers = _context.Users.Where(x => customUsers.Contains(new User(){EyeColor = x.EyeColor, FullName = x.FullName})).ToList();روش فوق و روش های زیادی رو سرچ کردم ولی به جواب نرسیدم. آیا میشه از EF استفاده کرد یا راه حل دیگری دارد ؟
var predicate = PredicateBuilder.False<User>();
foreach(var user in customUsers)
{
predicate = predicate.Or(u => u.FullName == user.FullName &&
u.EyeColor == user.EyeColor);
}
var specificUsers = _context.Users.Where(predicate).ToList();var customUsers = new List<User>
{
new User{FullName = "Ali Ahmadi", EyeColor = "Brown"},
new User{FullName = "Milad Rezaei", EyeColor = "Green"}
};
var specificUsers = _context.Users.Where(x => customUsers.Any(xx=> xx.EyeColor == x.EyeColor || xx.FullName == x.FullName)).ToList();آیا روش بالا به حل مسئله شما کمک میکنه؟ البته بجای اپراتور == میتوانید از متد Contains هم استفاده کنید که در نهایت به Is Exists در Sql Server ترجمه خواهد شد.
خیر؛ چون customUsers یک لیست از کلاس ساخته شده توسط خودمه (اگه لیست از جنس int، string و ... رو داشته باشم این مشکل نیست)به خاطر همین اکسپشن میده و میگه نمیتونم Linq رو ترجمه کنم.