C# 重新安排我的LINQ中的条款?

C# 重新安排我的LINQ中的条款?,c#,linq,C#,Linq,叹息。。。在我的墓碑上写着“在LINQ查询中添加一个子句” 因此,我有以下几点: var validStatuses = new[] { "Assigned", "Donor Called", "Dispatched", "Waiting", "Title Rec'd", "Sending Title", "Cancelled", "Waiting"}; var ud = db.Updates .Where(c => !c.Sold && validStat

叹息。。。在我的墓碑上写着“在LINQ查询中添加一个子句”

因此,我有以下几点:

var validStatuses = new[] { 
  "Assigned", "Donor Called", "Dispatched", "Waiting",
  "Title Rec'd", "Sending Title", "Cancelled", "Waiting"};

var ud = db.Updates
  .Where(c => !c.Sold && validStatuses.Contains(c.Status))
  .GroupBy(c => c.Vehicle)
  .Select(x => x
     .OrderByDescending(y => y.TimeStamp)
     .First())
  .ToList();
我意识到我需要在日期之后有Contains子句。换句话说,仅当最近的条目包含“ValidStates”时,我才需要选择最近的条目。现在它将返回多个条目,只要每个条目都包含“ValidStates”


我非常感激你的帮助。。。谢谢大家!

我的理解是这可能有效(但我错过了最新的评论…)


它是按车辆分组的,只保留最近项目具有有效状态的组…

正如您在问题中所建议的,只需将contains子句移到日期之后即可

var ud = db.Updates
  .Where(c => !c.Sold)
  .GroupBy(c => c.Vehicle)
  .Select(x => x
     .OrderByDescending(y => y.TimeStamp)
     .First())
  .Where(c => validStatuses.Contains(c.Status));

另外,如果您计划在linq to entities查询中使用
ud
,则不要将查询转换为末尾的列表。

并且您在相应地重构查询时遇到了什么问题?仅当最新条目包含“validStatus”时,我才需要选择最新条目-如果不包含有效状态,您希望选择什么?您能否给出一个示例,说明您正在查询的数据、您当前获得的结果以及您希望获得的结果。不是的,我不确定你是想要每辆车有一个条目,还是只想要一辆车。@juharr基本上我有3个网格视图。如果“状态”表中的最新条目包含网格表示的状态之一,则每个条目都会填充最新条目。例如,状态AB和C可能会填充网格A,而状态DE和F可能会填充网格B。基本上,我需要跟踪状态并将其分类为三个网格中的一个。。。每个都将绑定到一个linq查询,该查询在“validStates”数组的值中有所不同。现在我在多个表中显示相同的记录。我希望这是有意义的。。。目前正在服用咖啡因;)@Servy无论我如何尝试重新执行查询(很可能是我犯了一个简单的语法错误),Intellisense都是一个不错的选择。非常感谢!不幸的是,这似乎并不完全正确。(请不要恨我…我很累)在查询之后,我正在对结果进行连接,而您的查询似乎破坏了它。如果你想继续帮助我,整个事情如下:@PaulBinCT2它是不是抛出了一个
DoesNotWorkException
?我现在看到问题了。您有一个不需要的
ToList
。查询后,我有以下连接:var unladvehicles=(从ud中的u连接到db中的v。u上的车辆等于v.ID连接到db中的c。v上的客户等于c.ID选择new{status=u.status,make=v.make,model=v.model,Year=v.Year,vin=v.vin_,charity=c.Name,date=u.TimeStamp,id=u.Vehicle,salePrice=v.salePrice,bid=v.MinimumBid,note=u.note}).OrderBy(z=>z.charity.ToList();对不起,我正试图把这一切都纳入评论中:(@ScottKaye很抱歉你对我有这样的印象……这肯定不是我的本意
var ud = db.Updates
  .Where(c => !c.Sold)
  .GroupBy(c => c.Vehicle)
  .Select(x => x
     .OrderByDescending(y => y.TimeStamp)
     .First())
  .Where(c => validStatuses.Contains(c.Status));