我一直在研究如何使用LINQ创建查询(我是一个完全的新手)。
我的目标是创建一个表,它将使用来自这3个模型的查询,并根据OrderDate对它们进行过滤。在CustomerOrder模型:
class Item
[Key]
public int ItemId { get; set; }
public string ItemName { get; set; }
public string ItemDescription { get; set; }
public decimal ItemCost { get; set; }
public string ItemImage { get; set; }
public virtual ICollection<ItemsInOrder> ItemsInOrders { get; set; }
class ItemsInOrder
public int OrderNumber { get; set; }
public int ItemId { get; set; }
public virtual Item Item { get; set; }
public virtual CustomerOrder CustomerOrderNavigation { get; set; }
class CustomerOrder
public int OrderNumber { get; set; }
public DateTime OrderDate { get; set; }
public virtual ICollection<ItemsInOrder> ItemsInOrders { get; set; }
var testQuery = _context.Items
.Include(o=>o.ItemsInOrders)
.ThenInclude(i=>i.OrderNumberNavigation);
上面的查询不能让我访问除Items之外的其他表的属性。
我用条件语句解决了这个问题。
var testQuery = _context.Items.Select(i => i);
if(yearParameter != 0)
{
testQuery = testQuery
.Include(o => o.ItemsInOrders)
.Where(x => x.ItemsInOrders.Any(x => x.CustomerOrderNavigation.OrderDate.Year == yearParameter));
}
我很确定这仍然可以优化,但只要它能工作,我就会接受它。
PS:(请原谅我的lambda表达式的名称约定,它只是为Q &目的只)