1

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

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)
    }
4

1 回答 1

1

尝试将您的 where 子句更改为

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

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

于 2011-10-07T18:12:03.857 回答