LINQ to SQL - 搜索连接表的列

时间:2011-10-07 17:48:33

标签: linq-to-sql foreign-keys one-to-many contains any

我正在尝试返回一个结果集,其中包含三个字符串中任何一个字符串匹配的行。我的域名模型如下所示:

public class Customers
{
    public int CustomerID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class BidNames
{
    public int BidNameID { get; set; }
    public int CustomerID { get; set; }
    public string BidName { get; set; }
}

BidName.CustomerID和Customers.CustomerID之间存在FK,它是一对多关系,其中单个客户可以有多个BidNames。在搜索我的客户表时,我想带回FirstName,LastName或任何相关BidNames中存在字符串匹配的所有记录。对于此示例,我将使用BidName搜索字符串“ba”。

from c in Customers
where c.FirstName.Contains("ba") || c.LastName.Contains("ba") || c.BidNames.Any(b=>BidNames.BidName.Contains("ba"))
orderby c.LastName, c.FirstName
select new { CustomerID = c.CustomerID, FirstName = c.FirstName, LastName = c.LastName }

这一切都有效,直到我在Where子句中添加最终条件。我知道c.BidNames是一个集合,我想看看他们中的任何一个是否有一个包含“ba”的BidName。我遇到麻烦的地方是尝试指定BidNames.BidName列来搜索字符串。我上面写的代码失败,“BidNames不包含'BidName'的定义”

如何编写Where子句的最后一部分,以便搜索与Customer记录关联的所有BidNames.BidName字段?我希望并假设我可以使用相同的语法在orderby中指定BidName字段并选择子句。

非常感谢,

BK

最终答案:

from c in Customers
where 
    c.FirstName.Contains("ba") || 
    c.LastName.Contains("ba") || 
    c.BidNames.Any(b=>b.BidName.Contains("ba"))
orderby 
    c.LastName, 
    c.FirstName
select new { 
    CustomerID = c.CustomerID, 
    FirstName = c.FirstName, 
    LastName = c.LastName,
    BidNames = c.BidNames.OrderBy(b=>b.BidName)
    }

1 个答案:

答案 0 :(得分:1)

尝试将where子句更改为

Where c.FirstName.Contains("ba") || 
      c.LastName.Contains("ba") || 
      c.BidNames.Any(b=>b.BidName.Contains("ba"))

在您的Any子句中,b是BidNames类的实例,因此您希望访问该属性,而不是客户的BidNames属性。