【问题标题】:More efficient Linq-to-SQL query更高效的 Linq-to-SQL 查询
【发布时间】:2009-12-18 06:38:06
【问题描述】:

我正在寻找一种更有效的方法来执行此操作...(见下文)...我必须执行七次,因为我有七篇专题文章。我输入的 id 是页面 id(又名 featurearticles.fk_pageID_item1 featurearticles.fk_pageID_item2)。

我可以进行表连接而不是按原样选择 *。我也可以制作一个临时对象来保存信息。

DataAccess.Page pgf1 = (from p in db.Pages
where p.pageID == featurearticles.fk_pageID_item1
select p).FirstOrDefault();

PageArticle paf1 =(from pa in db.PageArticles
where pa.page_art_pageID == pgf1.pageID &&
pa.page_art_isCurrent ==true
select pa).FirstOrDefault();

Article af1 = (from a in db.Articles
where a.articleID == paf1.page_art_articleID
select a).FirstOrDefault();
  1. 获取页面。
  2. 获取当前版本。
  3. 获取该版本的信息。

我被这个表格布局卡住了。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    看看这个。这些都是内部连接,我不确定这是否完全是您需要的?如果不告诉我。

    var tp = from p in Pages
        join pa in PageArticles on p.pageID equals pa.page_art_pageID
        join a in Articles on pa.page_art_articleID equals a.articleID
        where p.pageID == featurearticles.fk_pageID_item1
        && pa.page_art_isCurrent
        select new { p, pa, a };
    

    我还可以将新选择更改为您需要的任何字段。

    【讨论】:

    • 如果你想修正你的评论以完全按照他已经在做的事情,编辑你的评论到我的,然后我会删除我的。
    • 您要我更改 selectFirstOrDefault 吗?
    • 您可以更改任何您喜欢的内容或保持原样 - 您的答案没有任何问题。我想为他提供一个替代解决方案,该解决方案完全满足他的要求,这样他就可以立即使用它,而不必担心如果他复制和粘贴您的解决方案会出现编译错误。但基本上我只是接受了你的答案并修复了它,以便它与他拥有的类一起编译。也许他有两个选择会更好,这样他就可以看到哪个最适合他的情况。
    • PS:我改变的不仅仅是 select 和 FirstOrDefault。如果您的代码要用作替代品,您的表名还需要在它们前面加上db.
    • 是的,我用我在快速解决方案中创建的本地类对此进行了测试,所以我现在确实包含了 db。
    【解决方案2】:

    大部分功劳归于 asstander。

    Article af1 = (from p in db.Pages
                   join pa in db.PageArticles on p.pageID equals pa.page_art_pageID
                   join a in db.Articles on pa.page_art_articleID equals a.articleID
                   where p.pageID == featurearticles.fk_pageID_item1
                   && pa.page_art_isCurrent == true
                   select a).FirstOrDefault();
    

    您应该可以将此查询用作您已有的查询的替代品。

    【讨论】:

    • && pa.page_art_isCurrent == true
    • 好的,这可能是因为您的 page_art_isCurrent 为 Nullable。我猜它是布尔值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多