使用ASP.NET MVC3在相关表中搜索

时间:2012-05-29 09:27:54

标签: asp.net-mvc-3 linq

这是我的(简化)代码:

控制器

var query = from f in _db.Firms
    where f.Name.ToLower().Contains(search.ToLower()) 
        || f.Keyword.ToLower().Contains(search.ToLower()) 
        || f.KeywordList.ToLower().Contains(search.ToLower())
    select f;

用户模型

public class User
{
    [Key]
    public int ID { get; set; }

    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public int FirmID { get; set; }
    [ForeignKey("FirmID")] 
    public virtual Firm Firm { get; set; }
}

公司模式

public class Firm
{
    [Key]
    public int ID { get; set; }

    public string Keyword { get; set; }
    public string KeywordList { get; set; }
    public string Name { get; set; }

    public virtual ICollection<User> Users { get; set; }
}

我有一个Controller和一个View,它列出了每个公司和它的用户来自数据库,其中包含一个特定的字符串。这项工作到目前为止。现在,我还要列出Firms,其中包含具有包含搜索字符串的用户名的用户。我怎么能做到这一点?

我的想法是这样的,但它不起作用,因为这里没有用户名:

var query = from f in _db.Firms
    where f.Name.ToLower().Contains(search.ToLower()) 
        || f.Keyword.ToLower().Contains(search.ToLower()) 
        || f.KeywordList.ToLower().Contains(search.ToLower())
        || f.Users.Username.ToLower().Contains(search.ToLower())
    select f;

1 个答案:

答案 0 :(得分:1)

使用联接

from firm in _db.Firms
join user in _db.Users on firm.FirmId equals _db.Firm.FirmId
where f.Name.Equals(...) && user.Name.Equals(...) // any other qualifications
select firm;