用LINQ加入2个列表?

时间:2010-12-29 04:04:04

标签: asp.net linq linq-to-sql

我不确定最好的方法来解决这个问题。简单的LINQ查询对我来说很简单,但我在这里寻找最有效的方法。

我有2个表,Sliders和SliderItems。 SliderItems有一个FK,指向Sliders Id。

我一直在获取有关特定滑块的信息:

    public static List<Slider> GetSlider(Slider sItem)
    {
        DBContext db = new DBContext();

        if (sItem.Id != Guid.Empty)
        {
            var list = from tbl in db.Sliders
                       where tbl.Id == sItem.Id
                       orderby tbl.Id
                       select tbl;

            return list.ToList();
        }
    }

因此,我需要为我的主页做的是将一组数据拉回到数据列表中。从而结合了随之而来的Slider + SliderItems。

我是否只使用JOIN语句执行正常的LINQ查询并将它们放入返回到我的DataList的通用列表中?

欣赏任何想法和方向。

3 个答案:

答案 0 :(得分:1)

如果您的数据库已经具有Sliders和SliderItems之间的外键关系,并且您的LINQ-to-SQL模型包括Sliders和SliderItems,那么搜索Slider会自动检索所有相关的SliderItems:

public static IEnumerable<SliderItems> GetSliderItems(Guid sliderId)
{
    using (DataContext dc = new DataContext())
    {
        Slider result = dc.Sliders.Single(s => s.Id == sliderId);

        return result.SliderItems;
    }
}

答案 1 :(得分:0)

这似乎没问题,但您已将自己的问题标记为ASP.Net。我的问题是这个列表的大小以及显示此页面的频率是多少?

如果您经常显示它并且它不是太大,我会将滑块表拉入内存然后运行您的查询而不会访问数据库。

事实上,如果可能的话,你可以缓存整个滑块和幻灯片。

即使你最近使用了它,如果它对你的应用程序有意义,那么不必点击数据库就会比优化看起来非常简单的父/子关系更好。我假设您在数据库中有一个索引tbl.Id

答案 2 :(得分:0)

我建议你可以使用Linq查询加入并将数据放入列表中。它适用于你。