我正在尝试返回一个结果集,其中包含三个字符串中的任何一个具有字符串匹配的行。我的域模型如下所示:
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。在搜索我的客户表时,我想带回在 FirstName、LastName 或任何关联的 BidName 中存在字符串匹配的所有记录。对于此示例,我将使用“ba”的 BidName 搜索字符串。
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 是一个集合,我正在查看其中是否有任何一个 BidName 包含“ba”。我遇到麻烦的地方是尝试指定 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)
}