Linq to sql LINQ到SQL-搜索联接表的列

Linq to sql LINQ到SQL-搜索联接表的列,linq-to-sql,foreign-keys,one-to-many,contains,any,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;

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

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,它是一对多关系,其中一个客户可以有多个BidName。在搜索我的customer表时,我希望返回在FirstName、LastName或任何关联的BidName中存在字符串匹配的所有记录。对于本例,我将使用BidName搜索字符串“ba”

在我在Where子句中添加最终标准之前,一切都是有效的。我知道c.BidNames是一个集合,我想看看其中是否有包含“ba”的BidNames。我遇到的问题是试图指定BidNames.BidName列来搜索字符串。我上面写的代码失败了,因为“BidNames不包含‘BidName’的定义”

如何编写Where子句的最后一部分,以便搜索与客户记录关联的所有BidNames.BidName字段?我希望并假设我可以使用相同的语法在orderby和select子句中指定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)
    }

尝试将where子句更改为

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

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

尝试将where子句更改为

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

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

谢谢-这非常有效。我问题的最后一部分是如何在我的OrderBy和Select子句中使用包含搜索条件的BidNames。不管怎样,我解决了(并将其添加到我的问题中)再次感谢!谢谢-那很好用。我问题的最后一部分是如何在我的OrderBy和Select子句中使用包含搜索条件的BidNames。不管怎样,我解决了(并将其添加到我的问题中)再次感谢!select子句中orderby上的另一个选项如果使用navigation属性,可以在上下文中使用LINQ to SQL DataLoadOptions设置BidNames上的顺序,并设置
dlo.AssociateWith(c=>c.BidNames.orderby(b=>b.BidName);
select子句中orderby的另一个选项如果使用导航属性,可以在上下文中使用LINQ to SQL DataLoadOptions设置BidNames的顺序,并设置
dlo.AssociateWith(c=>c.BidNames.orderby(b=>b.BidName);