LINQ,从一个表中选择一个项,从另一个表中选择多个项

时间:2015-04-20 08:45:07

标签: asp.net linq

我是使用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;表。 上面的代码运行正常,但是很慢。 只要每个表只有一行(或没有),我就没有任何问题从多个表中选择数据,但是当它是一个列表时我有问题......

1 个答案:

答案 0 :(得分:1)

如果我是你,我会使用延迟执行,而不是通过调用ToList来实现查询。我会将imagesproducts的数据类型更改为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();
}