我有两个存储过程,一个用于加载父数据,另一个用于加载子数据。反正有没有以更好的方式做到这一点?请参阅下面的代码。
public partial class Product
{
public long Id { get; set; }
public string ProductId { get; set; }
public string Name { get; set; }
public string ProductionNo { get; set; }
public string UniqueIdentificationNo { get; set; }
public virtual ICollection<Process> Processes { get; set; }
}
public List<GetProductsBetween_Result> GetProductsBetween(DateTime? startDate, DateTime? endDate)
{
var products = DbContext.GetProductsBetween(startDate, endDate).ToList();
foreach(var product in products)
{
product.Processes = DbContext.GetWaitingTime(product.Id).ToList();
}
return products;
}
答案 0 :(得分:0)
可以使用Linq(语言集成查询)重写整个场景。 您可以应用预先加载来获取产品的进程。这是类似的 到Linq提供的sql连接,这样一种状态,即代码优化和foreachs 并且可以减少对服务器的命中
var products = from u in dbContext.Product.Include(u => u.Processes)
select new ProductView
{
item1 = XXX,
item2 = yyy
};
var newdata = user.ToList().where("some lambda expressions")
具有过滤日期的条件
答案 1 :(得分:0)
我遇到了一个非常复杂的搜索问题,必须返回一个对象的完整树。
您需要做的是:
即。 (添加你自己的条件)
SELECT p.* FROM Products p WHERE p.Name LIKE '%test%';
SELECT DISTINCT r.* FROM Processes r INNER JOIN Products p ON p.id = r.idProduct WHERE p.Name LIKE '%test%';
您需要从第一个结果集中迭代每个产品并附加其进程。
这应该快得多,因为您只进行一次数据库往返和较少的查询。