使用LINQ如何合并两个列表?

4

我不确定最佳方法。简单的LINQ查询对我来说已经足够简单,但是我正在寻找最有效的方法。

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

我一直像这样获取有关特定滑块的信息:

    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。

是否只需要使用普通的LINQ查询和JOIN语句,然后将它们放入返回到我的DataList的通用列表中呢?

非常感谢您提供的思路和指导。


你能发布一下你建议的带有join的LINQ吗?我认为大多数情况下,只要提供合理的查询,LINQ就足够了。此外,你问题中的方法缺少一个返回,请修改一下。 - xandy
@pixelmouse> 这是你想要的吗?http://stackoverflow.com/q/4408584/17447 - naveen
3个回答

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;
    }
}

0

我建议您可以使用带有联接的Linq查询,并将数据放入列表中。这对您很有效。


0

看起來不錯,但是你將你的問題標記為ASP.Net。我的問題是這個列表有多大,以及你有多常顯示這個頁面?

如果你經常顯示它並且它不太大,我會將滑動表格放到內存中,然後運行您的查詢,而不需訪問DB。

事實上,如果可能的話,您可以緩存整個滑塊和滑塊項。

即使只緩存最近使用的,如果在您的應用程序中有意義,不必訪問DB會比優化似乎非常微不足道的父子關係更能提高性能。 我假設您在數據庫中有一個針對tbl.Id的索引嗎?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接