如何进行不完全匹配的LINQ to SQL连接?例如,假设我有一个数据表form
,其中包含数据John Smith(2)
,我想将其与表name
中的字段Smith
连接起来。类似这样的操作:
var query =
from f in db.form
join n in db.name
on f.nameField like '%' + n.firstName + '%'
尽管like
关键字似乎不可用于我。
如何进行不完全匹配的LINQ to SQL连接?例如,假设我有一个数据表form
,其中包含数据John Smith(2)
,我想将其与表name
中的字段Smith
连接起来。类似这样的操作:
var query =
from f in db.form
join n in db.name
on f.nameField like '%' + n.firstName + '%'
尽管like
关键字似乎不可用于我。
在 Linq 的 join 中不能使用 like
。实际上,在 Linq 中根本不能使用 like
,只能使用传统的字符串方法,例如 StartsWith
、EndsWith
或 Contains
。
您需要这样做:
var query =
from f in db.form
from n in db.name.Where(x => f.nameField.Contains(x.firstName))
...
实际上,有一种方法可以做到,但它不像使用标准的linq语法那样简洁:
from c in dc.Organization
where SqlMethods.Like(c.Hierarchy, "%/12/%")
select *;
只支持在客户端上可以评估的参数用于String.Contains方法。
我按照这里的详细说明,使用IndexOf
代替Contains
,成功让它工作了。 - Cavyn VonDeylenstring.Contains
是标准机制。 - p.s.w.gfrom n in db.name.ToList().Where(x => f.nameField.Contains(x.firstName))
。.ToList()
方法会评估实体集并将所有内容从数据库中载入到内存中。通过这样做,您可以使用string.Contains()
方法。但要注意,不要一次评估表中的所有对象。 - joao.arrudafrom
是什么意思?它是否等同于一个join
语句? - Hp93CROSS JOIN
,但请注意Where
限制了要考虑的db.name
记录集。 - p.s.w.g