2 回答

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

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; }
}
}
- 2 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報