第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

EF Core: LINQ 選擇“多對多對多”到“多對多”

EF Core: LINQ 選擇“多對多對多”到“多對多”

C#
慕容708150 2022-11-21 22:05:53
我確實有一個表“參考”和一個表“文章”,其中一篇文章引用了其他文章。我確實有簡單的引用,例如:A -> B查詢語句:select ab.*from Article ainner join Reference ab on ab.ArticleFromId = a.Idinner join Article b on b.Id = ab.ArticleToIdwhere a.ArticleNo = "1234"C# 鏈接:_context.Reference   .Where(r => r.ArticleFromNavigation.ArticleNo.Equals("1234"));我也有參考鏈,例如:A -> B -> C(假設(shè)一條鏈中最多只有 3 篇文章)查詢語句:select ab.ArticleFromId, bc.ArticleToIdfrom Article ainner join Reference ab on ab.ArticleFromId = a.Idinner join Article b on b.Id = ab.ArticleToIdinner join Reference bc on bc.ArticleFromId = b.Idinner join Article c on c.Id = bc.ArticleToIdwhere a.ArticleNo = "1234"這在 SQL 中很容易,因為結(jié)果只是乘以額外的連接,但我不知道如何在 LINQ 中編寫它。我希望它是這樣的(這是行不通的):_context.Reference   .Where(r => r.ArticleFromNavigation.ArticleNo.Equals("1234"))   .Select(r => new Reference   {       ArticleFromNavigation = r.ArticleFromNavigation, //this is article "A"       ArticleToNavigation = r.ArticleToNavigation.ReferenceArticleToNavigations //this wont work as it's a iCollection   }).AsNoTrackable();在這里,我想要“A -> C”的“參考”類型的新結(jié)果。我想我必須在“新參考”部分之前包含/然后包含/加入/選擇/selectmany(?)集合,但我不知道。有什么辦法可以存檔嗎?
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗 獲得超2個贊

好吧,您可以像在 SQL 中一樣完成它,但使用導(dǎo)航屬性而不是連接。


我將使用 LINQ 查詢語法,因為它能更好地顯示相似性,而且方法語法對于此類查詢來說非常復(fù)雜且難以閱讀:


from a in _context.Article

from ab in a.ReferenceArticleFromNavigations

let b = ab.ArticleToNavigation

from bc in b.ReferenceArticleFromNavigations

let c = bc.ArticleToNavigation

where a.ArticleNo = "1234"

select new Reference

{

    ArticleFromNavigation = a,

    ArticleToNavigation = c,

}

這些let語句不是很需要(您可以直接使用引用導(dǎo)航屬性),我包含它們只是為了使 LINQ 查詢更接近 SQL 查詢。


實際上,在這種情況下等效方法并沒有那么糟糕 - 使用嵌套將多個級別展平SelectMany并使用重載投影 (top, bottom) 對,SelectMany允許:


_context.Article

    .Where(a => a.ArticleNo = "1234")

    .SelectMany(a => a.ReferenceArticleFromNavigations

        .SelectMany(ab => ab.ArticleToNavigation.ReferenceArticleFromNavigations)

        // include as many `SelectMany` like the above as you wish until you hit the desired level of nesting

        .Select(bc => bc.ArticleToNavigation),

    (a, c) => new Reference

    {

        ArticleFromNavigation = a,

        ArticleToNavigation = c,

    });


查看完整回答
反對 回復(fù) 2022-11-21
?
炎炎設(shè)計

TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊

我將數(shù)據(jù)庫建模為類以使語法正確。請參閱下面的代碼:


using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace ConsoleApplication107

{

    class Program

    {

        static void Main(string[] args)

        {

            Context _context = new Context();

            string ArticleNo = "1234";


            var results = (from a in _context.article.Where(x => x.Id == ArticleNo)

                           join ab in _context.reference

                              .Where(x => (x.ArticleFromId == x.ArticleToId))

                              on a.Id equals ab.ArticleFromId

                           select new { a = a, ab = ab }

                          ).Select(r => new Reference()

                          {

                              ArticleFromNavigation = r.a,

                              ArticleToNavigation = r.a.ReferenceArticleToNavigations.ToList() 

                          }).ToList();

        }

    }


    public class Context

    {

        public List<Reference> reference { get; set; }

        public List<Article> article { get; set; }

    }

    public class Reference

    {

        public string ArticleFromId { get; set; }

        public string ArticleToId { get; set; }

        public Article ArticleFromNavigation { get; set; }

        public List<string> ArticleToNavigation { get; set; }

    }

    public class Article

    {

        public string Id { get; set; }

        public List<string> ReferenceArticleToNavigations { get; set; }

    }


}


查看完整回答
反對 回復(fù) 2022-11-21
  • 2 回答
  • 0 關(guān)注
  • 117 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號