我正在获取一个字符串数组,我想查看域对象中的一定数量的数据字段是否包含所有这些字符串。我知道编译时的数据字段,但不知道编译时数组的大小。
有没有一种方法可以让我在运行时编写一个 where 子句,以便我可以在单个 linq 查询中执行我要查找的操作。
如果您想知道为什么它是单个查询:我想尽可能减少到数据库的往返次数。
public IEnumerable<domainObjects> GetObjectsWith(string[] data)
{
var results = from d in domainObjects
where
(d.Data.Contains(data[0]) && d.Data.Contains(data[1]) && ...)
||
(d.Data2.Contains(data[0]) && d.Data.Contains(data[1]) && ...)
.
.
. // Data fields known at compile-time
}
最终结果是,给定 2 个对象:
domainObject { Address = "1st st", Description="has couch and bed" }
domainObject2 { Address = "1st rd", Description="has couch" }
查询{ "couch", "bed" }
只会返回domainobject 1 但查询{ "couch" }
都会返回。
Likeqise 查询{ "1st", "couch", "bed" }
也会同时返回。
您应该使用 PredicateBuilder,它是一个免费的实用程序类,允许您在运行时使用 And 和 Or 构造复杂的 where 子句。您可以循环遍历数组并以这种方式构建 where 子句。
http://www.albahari.com/nutshell/predicatebuilder.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)