【发布时间】:2019-06-04 15:01:26
【问题描述】:
我刚刚使用 asp.net 核心开始了我的第一个项目,并且我将第一次在 C# 和 VS 2019 中为我的项目使用代码存储库。 我创建了一个新模型,它名为 Comment。该表可以保存项目中所有的cmets,即用户在POSTS、SOCIALMEDIA等领域的cmets都保存在该表中
[Key]
public int CommentId { get; set; }
public eTable Table { get; set; }
public int ContentId { get; set; }
[StringLength(1500)]
public string Notes { get; set; }
public virtual AnalysedMarket AnalysedMarket { get; set; }
ContentID 是我的外键,我的 eTable 枚举类型如下所示:
public enum eTable
{
AnalysedMarket,
Blog,
News,
Migration,
}
我还为 AnalysedMarket 创建了一个新类,以保存我们社交媒体区域中的用户数据。
[Key]
public int AnalysedMarketId { get; set; }
[StringLength(255)]
public string Images { get; set; }
public int Hits { get; set; }
public string Notes { get; set; }``
现在我在我的代码存储库中创建了一个方法,用于使用 EF 和 LINQ 提取数据以获取 AnalysedMarket 数据列表,但我无法将我的结果包含在注释表中,并且我的代码存储库在注释部分的结果始终为空。
public async Task<IEnumerable<AnalysedMarket>> List(int? page, int? perPage, eStatus? status, string userId)
{
var query = _db.AnalysedMarkets.Select(a => a);
if (status.HasValue)
query = query.Where(m => m.Status.Equals(status));
if (!string.IsNullOrEmpty(userId))
query.Where(m => m.CreatedBy.Equals(userId));
query.Include(a => a.Comments.Where(c => c.Table.Equals(eTable.AnalysedMarket) && c.ContentId == a.AnalysedMarketId));
if (page.HasValue && perPage.HasValue)
return await query.OrderBy(a => a.AnalysedMarketId).ToPagedListAsync(page.Value, perPage.Value);
else
return await query.OrderBy(a => a.AnalysedMarketId).ToListAsync();
}
实际上我的问题是如何获取评论数据中包含的 AnalysedMarket 数据列表。 它有一个条件,如果 ContentId 等于 AnalysedMarketId 并且 eTable 是 Table.AnalysedMarket,则包含注释。
【问题讨论】:
-
您必须从引用的表中加载结果,就像 _db.Comment.Select(a => 不管条件是什么).Include(x => x.AnalysedMarket)
-
@man_luck 没有办法从 AnalysedMarket 端加载数据??因为我只解释了其中一种关系,但表之间的关系不止几种
标签: c# entity-framework linq asp.net-core