使用LINQ从表中获取最后一个事务

时间:2012-09-12 05:49:05

标签: c# linq-to-sql join

我正在使用c#使用LINQ和MS SQL。我在获取记录方面遇到了问题。我有两张桌子, 销售 交易 Sales表中引用了Sales主键.Data就像, enter image description here

我要做的是获取金额的所有记录!= 0.在此示例中,结果应仅包括Sales2和Sales3,但不包括Sales1。自Sales1关闭。

我写了一个像

这样的查询
List<Sales> lstSales = (from ccs in context.Sales
                        join transactions in context.Transactions 
                             on ccs.SALESID equals  transactions.SALESID            
                        where transactions .AMOUNT !=0 
                       select ccs).ToList();

它返回了我所有的3条销售记录,因为对于Sales1的1行,金额为!= 0。

请指导我达到预期的效果。

提前致谢, 维杰

2 个答案:

答案 0 :(得分:0)

虽然您的查询会过滤掉已关闭的交易,但您仍然拥有&gt;结果中有0个事务,因此您仍然可以获得Sales1 Id。

试试这个(它应该可行,但我没有测试过这个);

IEnumerable<int> closedIds = context.Transactions.Where(t => t.Amount == 0).Select(t=> s.SalesId);
List<Sales> sales = context.Sales.Where(s => !closedIds.Contains(s.SalesId));

另一种方法是(假设您在上下文中有Sales和Transaction之间的关联);

List<Sales> sales = context.Sales.Where(s => !s.Transactions.Any(t=> t.Amount == 0));

答案 1 :(得分:-2)

利用以下其中一项:

Enumerable.Any Enumerable.All