如何从另一个表中获取基于ID的一个表数据

乌梅尔工程师

我创建了3个表关系(用户,项目,产品)

一个用户有很多项目,一个项目有很多产品(一对多)

我需要在用户登录时显示所有项目和包含的产品

我使用以下代码完成了此操作,但我认为这不是处理它的最佳方法。我需要做得更好

public ActionResult Index()
    {

        ModulesViewModel mvm = new ModulesViewModel();
        List<Modules> modules = new List<Modules>();
        var userId = User.Identity.GetUserId();
        var projects = _adsDbContext.Project.Where(x=>x.UserID == userId).ToList();
        foreach (var pro in projects)
        {

            var productData = _adsDbContext.Product.Where(x => x.ProjectID == pro.ProjectID); 
            modules.AddRange(productData);

        }
        modules = modules.OrderBy(x => x.ProjectID).OrderBy(x=>x.ModuleNumber).ToList();
        mvm.Modules = modules;
        return View(mvm);
    }

public class Project
{
    public int ProjectID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ProductData> Products { get; set; }


    public string UserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

public class ProductData : Modules
{
    public int ProductDataID { get; set; }
    public float ConversionRate { get; set; }
    public float Price { get; set; }
    public float TotalSales { get; set; }
    public float GrossSales { get; set; }
    public float NetProfit { get; set; }
    public float ProfitPerLead { get; set; }
}


public abstract class Modules
{

    public int ProjectID { get; set; }
    public virtual Project Project { get; set; }
}

这可以正常工作,但我需要以更好的方式做到这一点,而不是从头开始创建关系或使查询更好。

伊万·斯托夫

您的模型包含项目与产品之间一对多关系的每个末端的导航属性。

这使您可以从项目开始查询,应用过滤器,然后使用集合导航属性和“向下导航” SelectMany

var modules = _adsDbContext.Project
    .Where(x => x.UserID == userId)
    .SelectMany(x => x.Products) // <--
    .OrderBy(x => x.ProjectID).ThenBy(x => x.ModuleNumber)
    .ToList<Modules>();

或者您可以从产品开始查询,然后使用参考导航属性“导航”以应用过滤器:

var modules = _adsDbContext.Product
    .Where(x => x.Project.UserID == userId) // <--
    .OrderBy(x => x.ProjectID).ThenBy(x => x.ModuleNumber)
    .ToList<Modules>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Oracle中的另一个表获取一个表的ID计数

如何从另一个工作表中获取基于ID的值

如何从Sequelize没有默认ID的另一个表中获取数据?

如何基于MySQL中另一个表的id字段在表中查找记录?

如何获取最后一个基于插入值的ID,该ID源自另一个表?

如何基于另一个表替换数据表中的值

如何使用一个表中的数据作为参考以使用 Firebase 获取另一个表中的另一个数据?

从另一个表中获取丢失的数据

从另一个基于id laravel的表中获取价值

如何从一个表中获取记录,而另一个表中的ID不匹配

如何从表中获取数据并移动到jquery中的另一个表

如何从另一个表中的一个表中数据?

如何从另一个表中获取总计

如何计算另一个表中的数据

基于另一个表的序列从另一个获取序列字段

如何在laravel中基于Auth用户显示来自另一个表的数据

如何基于另一个表中的(提交数据)运行谷歌脚本?

如何根据Firebase中检索到的数据从另一个表中获取数据

Laravel 5.2:数据库记录获取并检查另一个表中的ID

MS Access SQL:基于另一个表中的总和从一个表中返回数据

如何基于另一个表的PK获取一个表的两列的计数?

如何基于一个表与另一个数据库中的同一表更新数据库中的表记录?

从2个表中获取数据并插入到另一个表中

linq从基于另一个表的表中获取数据的更有效方法?

如何基于另一个表中的两个日期字段获取一个表中的记录数

如何基于另一个插入表?

如何替换基于另一个表的文本?

如何基于另一个表列更新表?

无法在PostgreSQL中另一个表来筛选基于数据的一个表的行