Entity Framework Code First Linq MVC 3 Бритва - PullRequest
0 голосов
/ 13 июля 2011

Это моя модель;

namespace AtAClick.Models
{
    public class LocalBusiness
    {
        public int ID { get; set; }

        public string Name { get; set; }
        public int CategoryID { get; set; }
        public string address { get; set; }
        public string desc { get; set; }
        public int phone { get; set; }
        public int mobile { get; set; }
        public string URL { get; set; }
        public string email { get; set; }
        public string facebook { get; set; }
        public string twitter { get; set; }

        public string ImageUrl { get; set; }

        public virtual Category Category { get; set; }

    }

    public class Category
    {
        public int CategoryID { get; set; }
        public string Name { get; set; }

        public virtual ICollection<LocalBusiness> Businesses { get; set; }
    }

}

У меня есть представление, в котором перечислены категории и одно, в котором перечислены предприятия.Я хочу другой, который перечисляет все бизнесы в определенной категории. Мой вопрос: как будет выглядеть мой запрос Linq в моем контроллере?Нечто подобное ..

var companyquery = from c in db.LocalBusiness
                   where c.Category = Category.Name
                   select c;

Но, очевидно, это не работает.Я новичок во всем этом, поэтому заранее спасибо за помощь, и если вам нужно больше деталей, просто спросите.Спасибо !!

Мой контроллер, это ты о чем?

 public ViewResult Browse(int id)
 {

            int categoryID = id;

            var companyquery = from c in db.LocalBusinesses
                               where c.Category.CategoryID == categoryID
                               select c;

            return View(companyquery);
 }

Ответы [ 3 ]

1 голос
/ 13 июля 2011

Вы сравниваете объект категории (c.Category) со статическим полем класса Category (Category.Name).Статическое поле не существует, и поэтому оно не будет компилироваться.

У вас должна быть переменная с указанием объекта конкретной категории или хотя бы идентификатор (например, CategoryID).Имени недостаточно, так как это свойство не уникально (возможно иметь две разные категории с одним и тем же именем).

Итак, допустим, вы как-то получили конкретный CategoryID, тогда ваш запрос LINQ будет выглядеть так:

    // The category ID to filter.
    int categoryID = 42;

    // Retrieve all companies that are listed under the given category.
    var companyquery = from c in db.LocalBusiness
                       where c.Category.CategoryID = categoryID
                       select c;

Ваш идентификатор категории, например, можно получить из параметра запроса (объявить как параметр метода контроллера).

0 голосов
/ 13 июля 2011

Если вы фильтруете по названию категории

string categoryName = "foo";

var companyquery = from c in db.LocalBusiness
                   where c.Category.Name == categoryName
                   select c;

Если вы фильтруете по идентификатору категории

int categoryId = 1;

var companyquery = from c in db.LocalBusiness
                   where c.CategoryID == categoryId 
                   select c;
0 голосов
/ 13 июля 2011

Так как в категории есть коллекция предприятий, которые вы можете сделать

IEnumerable<LocalBusiness> result = null;
var category = db.Category.SingleOrDefault(cat => cat.Name == "an cat");
if(category != null){
    result = category.Businesses;
}

return result;
...