Я хочу искать рестораны, которые могут иметь ключевое слово в названии или названии своих продуктов.Я использую LINQ to SQL.Код:
Контекст данных:
protected MyDataContext database;
Вариант 1:
var restaurants = database.tblRestaurants.ByName(keyword).Union(database.tblRestaurants.ByFood(keyword));
Подпись ByName метод:
public static IQueryable<tblRestaurant> ByName(this IQueryable<tblRestaurant> restaurants, string name)
{
var result = from restaurant in restaurants
where restaurant.BusinessName.ToUpper().Contains(name.ToUpper())
select restaurant;
return result;
}
Подпись ByFood Метод:
public static IQueryable<tblRestaurant> ByFood(this IQueryable<tblRestaurant> restaurants, string food)
{
var result = from restaurant in restaurants
from product in restaurant.tblProducts
where product.Name.ToUpper().Contains(food.ToUpper())
select restaurant;
return result;
}
Работает нормально.Но у меня есть еще один вариант выбора, используя левое соединение. Вариант 2:
var restaurants = from restaurant in database.tblRestaurants
join product in database.tblProducts
on restaurant.OId equals product.RestaurantOId into products
from p in products.DefaultIfEmpty()
where
p.Name.ToUpper().Contains(keyword.ToUpper()) |
restaurant.BusinessName.ToUpper().Contains(keyword.ToUpper())
select restaurant;
Мой вопрос: какой из них использовать?Параметры рассмотрения:
- Производительность
- Ремонтопригодность
- ООП
В итоге, что бы вы сделали, еслиесть оба варианта