我有一个可变大小的字符串数组,我试图以编程方式循环遍历该数组并匹配表中的所有行,其中“Tags”列至少包含数组中的一个字符串。这是一些伪代码:
IQueryable<Songs> allSongMatches = musicDb.Songs; // all rows in the table
我可以轻松地查询此表并过滤一组固定的字符串,如下所示:
allSongMatches=allSongMatches.Where(SongsVar => SongsVar.Tags.Contains("foo1") || SongsVar.Tags.Contains("foo2") || SongsVar.Tags.Contains("foo3"));
但是,这不起作用(我收到以下错误:“带有语句主体的 lambda 表达式无法转换为表达式树”)
allSongMatches = allSongMatches.Where(SongsVar =>
{
bool retVal = false;
foreach(string str in strArray)
{
retVal = retVal || SongsVar.Tags.Contains(str);
}
return retVal;
});
有人能告诉我实现这一目标的正确策略吗?我对 LINQ 的世界还是个新手:-)
您可以使用PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx class:
var searchPredicate = PredicateBuilder.False<Songs>();
foreach(string str in strArray)
{
var closureVariable = str; // See the link below for the reason
searchPredicate =
searchPredicate.Or(SongsVar => SongsVar.Tags.Contains(closureVariable));
}
var allSongMatches = db.Songs.Where(searchPredicate);
Linq To Sql 奇怪的行为 https://stackoverflow.com/questions/658818/linqtosql-strange-behaviour/658840#658840
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)