我正在尝试返回一个结果集,其中包含三个字符串中任何一个字符串匹配的行。我的域名模型如下所示:
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)
}
答案 0 :(得分:1)
尝试将where子句更改为
Where c.FirstName.Contains("ba") ||
c.LastName.Contains("ba") ||
c.BidNames.Any(b=>b.BidName.Contains("ba"))
在您的Any子句中,b是BidNames类的实例,因此您希望访问该属性,而不是客户的BidNames属性。