我只是将这些数据发送到Asp.net MVC5中的报表引擎(SSRS)。
一切都很好,但这个查询花了很多时间,因为我必须循环通过ListProducts
(我猜ListProducts
是数据库匹配的大小)。其中列表中包含任何列表
我只是在寻找一种方法来优化这个查询。
我试过any
和contains
(如下图所示),但它们似乎不适用于单个表格。
context.Products.Where(w => w.ProductDetail.Any(a => a.startDate >= startDate
&& a.endDate <= endDate))
我得到这个从here
2)我试图this as well
context.Products.Where(w => ListProducts.Any(x =>w.Contains(x)))
但这也不能正常工作,并生成一个编译时错误
的System.Guid不包含'Contains'的定义
有没有其他方法,或者我正在做它唯一正确的方法?
foreach (var item in ListProducts)
{
List.AddRange(_context.Products.Where(w => w.ProductId== item).Select(q => new ProductVM
{
Name = q.Name,
Quantity = q.Quantity,
}).ToList().Select(item=> new ProductVM
{
Name = item.Name,
Quantity = item.Quantity,
}).ToList());
}
public class Product
{
public Nullable<System.Guid> ProductId { get; set; }
public string Name { get; set;}
public decimal Quantity { get; set; }
}
在你可能想提供一个定义或Product'的'POCO最起码的。可以推断,但是你让人们做更多的分析工作,而不是解决其他非常简单的问题。 – nathanchere
你必须使用LINQ吗?如何通过'_context'执行Raw SQL,以便优化查询。你甚至可以使用像Dapper这样的ORM,它会很好地为你绘制你的对象。非常强大的工具,速度也非常快。有一个数据结构可以很好,所以我可以看到这一切如何在数据库中联系起来。 – scgough
其实我没有提供原始的类和数据,由于一些限制,但我已经做出了基于这些类的例子,数据库的实际设计是相当复杂的,但我已经做了一个简单的例子,以便快速理解,所以你可以把它作为一个产品类具有像名称数量少的属性,我只是想获得数据,如问题中所解释的..如果需要更多的解释,然后随意问 – Dragon