Subsonic 通过ID列表对对象进行亚音速加载

Subsonic 通过ID列表对对象进行亚音速加载,subsonic,load,subsonic3,Subsonic,Load,Subsonic3,是否可以使用亚音速ActiveRecord通过ID列表加载对象? 我的代码如下所示: IList<Video> videos = Video.Find(v => videoIds.Contains(v.ID)); IList videos=Video.Find(v=>videoid.Contains(v.ID)); 我遇到一个异常:不支持方法“Contains” 我做错什么了吗。。。或者我碰到了亚音速的一个限制 谢谢,Radu经过更多的研究,我找到了一种实现这一点的方法:

是否可以使用亚音速ActiveRecord通过ID列表加载对象? 我的代码如下所示:

IList<Video> videos = Video.Find(v => videoIds.Contains(v.ID));
IList videos=Video.Find(v=>videoid.Contains(v.ID));
我遇到一个异常:不支持方法“Contains”

我做错什么了吗。。。或者我碰到了亚音速的一个限制


谢谢,Radu经过更多的研究,我找到了一种实现这一点的方法:

 List<int> videoIds = new List<int>(){1, 2, 3, 4, 5};
 SqlQuery query = new Select().From<Video>().Where("ID").In(videoIds);
 List<Video> videos = query.ExecuteTypedList<Video>();
List videoIds=newlist(){1,2,3,4,5};
SqlQuery query=new Select().From().Where(“ID”).In(videoIds);
List videos=query.ExecuteTypedList();

这是我相信你要找的那一行

var colMatchingVideos=Video.Find(objVideo=>colvideoid.Any(iVideoId=>objVideo.ID==iVideoId.ToList()


另外,我强烈建议您避免对列使用字符串文字,而可以使用Video.columns.Id或表达式Where(o=>o.Id)。这将确保如果更改数据库中的列名,将发生编译时异常。有关可维护性的帮助非常多。

仅供参考:亚音速的linq解析器不喜欢通用列表,并且包含

// does not work
List<int> videoIds = new List<int>() {1,2,3,4,5};
var videos = Video.Find(v => videoIds.Contains(v.ID));

// should work
IEnumerable<int> videoIds = new List<int>() {1,2,3,4,5};
var videos = Video.Find(v => videoIds.Contains(v.ID));
//不起作用
List videoIds=新列表(){1,2,3,4,5};
var videos=Video.Find(v=>videoIds.Contains(v.ID));
//应该有用
IEnumerable videoIds=新列表(){1,2,3,4,5};
var videos=Video.Find(v=>videoIds.Contains(v.ID));
注意到区别了吗

听起来很奇怪,但每当您想将Contains()用于亚音速时,首先必须将列表强制转换为IEnumerable,以防止出现NotSupportedException