是否可以使用亚音速ActiveRecord通过id列表加载对象? 我的代码如下:
IList<Video> videos = Video.Find(v => videoIds.Contains(v.ID));
我遇到异常:不支持“包含”方法
我做错了什么......或者我遇到亚音速的限制之一?
谢谢,Radu
答案 0 :(得分:1)
经过更多研究后,我找到了实现这一目标的方法:
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>();
答案 1 :(得分:1)
仅供参考:SubSonic的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));
注意到差异?
听起来很奇怪,但是每当你想在Packonic中使用Contains()时,首先必须将List转换为IEnumerable以防止NotSupportedException。
答案 2 :(得分:0)
这是我认为你在寻找的单线。
var colMatchingVideos = Video.Find(objVideo =&gt; colVideoIds.Any(iVideoId =&gt; objVideo.ID == iVideoId)。ToList();
此外,我强烈建议您避免对列使用字符串文字,而是可以使用Video.Columns.Id或表达式Where(o =&gt; o.Id)。这将确保如果您在数据库中更改列名称,将发生编译时异常。在可维护性方面提供了很多帮助。