Entity framework 实体框架代码第一个Linq MVC 3剃须刀
这是我的模型Entity framework 实体框架代码第一个Linq MVC 3剃须刀,entity-framework,asp.net-mvc-3,linq-to-entities,code-first,Entity Framework,Asp.net Mvc 3,Linq To Entities,Code First,这是我的模型 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; } publ
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; }
}
}
但很明显,这是行不通的。我对这一切都是新手,所以提前谢谢你的帮助,如果你需要更多的细节,尽管问吧。谢谢
我的控制器,这是你的意思吗
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);
}
因为分类有一系列你可以做的事情
IEnumerable<LocalBusiness> result = null;
var category = db.Category.SingleOrDefault(cat => cat.Name == "an cat");
if(category != null){
result = category.Businesses;
}
return result;
IEnumerable结果=null;
var category=db.category.SingleOrDefault(cat=>cat.Name==“一只猫”);
如果(类别!=null){
结果=类别。业务;
}
返回结果;
如果按类别名称筛选
string categoryName = "foo";
var companyquery = from c in db.LocalBusiness
where c.Category.Name == categoryName
select c;
如果您是按类别id进行筛选
int categoryId = 1;
var companyquery = from c in db.LocalBusiness
where c.CategoryID == categoryId
select c;
您正在比较category对象(c.category)和category类的静态字段(category.Name)。静态字段不存在,因此不会编译 您应该有一个变量来说明特定的category对象,或者至少有一个标识符(比如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;
例如,您的categoryID可以从查询参数(声明为控制器方法参数)中获得。谢谢您的回复。但是,当我尝试这样做时,会出现“对象引用未设置为对象的实例”错误。@Dan是否是LocalBusiness的类别或集合“不是实例”?如果发现的是一个集合,而该集合没有添加任何业务,那么很有可能出现这种情况。在我看来,错误出现在foreach的开头,因此这就是业务集合。这一类别肯定增加了两项业务。我有一个列出它们的视图。嗨,谢谢你的回复,我想把我的控制器添加到我的问题中。这是你的意思吗?再次感谢!是的,类似于:-)您错过了一个用于声明和初始化objectcontext(本例中称为db的变量)的using语句。如果您调用方法参数categoryID,您可以立即使用它,并且您的URL对最终用户()更有意义。谢谢!我需要类别ID被接收,而不是直接编码到控制器中。
// 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;