我是使用LINQ的新手,现在正在尝试构建一个我无法解决的LINQ问题。 我想向一个数据库提出一个问题,我希望从几个表中返回单行,但是从其他表中返回行列表。
请参阅下面的代码,看看我想要做什么:
public DB.store store { get; set; }
public List<DB.gallery_image> images { get; set; }
public List<DB.product> products { get; set; }
public static List<Store> getStoreInfo()
{
DBDataContext db = new DBDataContext();
var _dataToGet = from _store in db.stores
select new Store
{
store = _store,
images = (from a in db.gallery_images
where a.albumID == _store.storeID
select a).ToList(),
products = (from p in db.products
where p.storeID = _store.storeID).ToList()
};
return _dataToGet.ToList();
}
所以我只想要来自&#34; store&#34;表,但来自&#34;图像的列表&#34;和&#34;产品&#34;表。 上面的代码运行正常,但是很慢。 只要每个表只有一行(或没有),我就没有任何问题从多个表中选择数据,但是当它是一个列表时我有问题......
答案 0 :(得分:1)
如果我是你,我会使用延迟执行,而不是通过调用ToList
来实现查询。我会将images
和products
的数据类型更改为IEnumerable<>
而不是List<>
。然后我不会在子查询中调用ToList
,因为这会导致数据库的往返,因此,根据您拥有的stores
的数量,它可能变成极慢的查询。
你应该在这里看到性能提升......
public DB.store store { get; set; }
public IEnumerable<DB.gallery_image> images { get; set; }
public IEnumerable<DB.product> products { get; set; }
public static List<Store> getStoreInfo()
{
DBDataContext db = new DBDataContext();
var _dataToGet = from _store in db.stores
select new Store
{
store = _store,
images = (from a in db.gallery_images
where a.albumID == _store.storeID
select a),
products = (from p in db.products
where p.storeID = _store.storeID)
};
return _dataToGet.ToList();
}