我在Subsonic 3上使用ActiveRecord,我实际上想要这样做:
select * from foo
left outer join bar on bar.Id = foo.barId
where foo.someProperty = 2
我已经编写了一个存储过程来获取数据,但是Subsonic只创建了用于保存foo和bar列的对象。
将数据返回到单个对象的最佳方法是什么,所以我可以绑定它。理想情况下,我希望它在列表中<>但是,如果不编写我自己的课程,似乎没有亚音速提供的方法。
答案 0 :(得分:4)
你有几个选择...
您可以创建一个连接的数据库视图,让SubSonic为您的视图生成数据类型,然后您的选择就像从任何其他表中选择一样。
或者,您可以使用Linq表达式将联接转换为匿名或动态类型(如果您使用的是.net 4)例如:
public List<dynamic> LoadData(int id)
{
var data = from f in db.Foo
from b in db.Bar.Where(x => x.Id == f.BarId).DefaultIfEmpty()
where f.SomeProperty == id
select new
{
SomeProperty = f.Something,
AnotherProperty = b.SomethingElse
};
return data.Cast<dynamic>().ToList();
}
当然另一种方法是执行上面的Linq表达式,但是定义自己的类来保存返回的数据,然后选择它。
public class MyData
{
public string SomeProperty { get; set; }
public string AnotherProperty { get; set; }
}
public List<MyData> LoadData(int id)
{
var data = from f in db.Foo
from b in db.Bar.Where(x => x.Id == f.BarId).DefaultIfEmpty()
where f.SomeProperty == id
select new MyData()
{
SomeProperty = f.Something,
AnotherProperty = b.SomethingElse
};
return data.ToList();
}