2016-08-02 30 views
1

所以我有“不断扩展的LINQ查询”...我发现自己必须处理一些参数,并且我正在交叉。我有这样的:添加或我的LINQ查询?

var ud = db.Updates 
    .Where(c => c.Sold.Equals(false)&&(c.Status.Equals(("Pending")))) 
    .GroupBy(c => c.Vehicle) 
    .Select(x => x 
     .OrderByDescending(y => y.TimeStamp) 
     .First()) 
    .ToList(); 

,我需要一个或添加到“c.Status.Equals”,测试多个字符串值...如“待定” || “拒绝”什么是正确的方式/地点来做到这一点?

非常感谢您的帮助!

+0

为什么不是'c =>!c.Sold && c.Status ==“Pending”'?你真的不需要在这里使用'Equals'。 – juharr

回答

11

你可能要考虑存储值的数组,看看是否有任何限制的满足:

// Store all of the statuses you need to match within a collection 
var validStatuses = new []{ "Pending", "Rejected", ... }; 

然后你只需要更新您的Where()子句来检查,如果您现有的地位相匹配的任何那些先前定义的集合中:

db.Updates.Where(c => !c.Sold && validStatuses.Contains(c.Status))) 
+0

...谢谢!我知道必须有一个更简单的方法来做到这一点,但Intellisense尖叫。那里有语法错误吗?我越来越穿衣服,但我试图弄清楚。 – PaulBinCT2

+0

Oyyy ......当然。谢谢!我真的应该知道,不要熬夜来殴打我的头,反对这种事情。我非常感谢!非常感谢! – PaulBinCT2

+0

糟糕。我错过了大括号来表明上面的集合是一个数组。这应该可以解决问题。 –

0

(c.Status.Equals( “待定”)|| c.Status.Equals( “拒绝”))

var ud = db.Updates 

     .Where(c => c.Sold.Equals(false) &&(c.Status.Equals("Pending") || c.Status.Equals("Rejected"))) 
     .GroupBy(c => c.Vehicle) 
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList(); 
+0

@Ri @威廉姆斯...我可以再次赢得你的好意吗?我意识到我需要做出改变,我的大脑正在融化。这里最终的结果是我需要从我的表中检索最新的条目是否包含数组值之一。这意味着我需要在末尾应用该子句(?) 我到目前为止的内容如下: – PaulBinCT2

+0

var validStatuses = new [] {“Assigned”,“Donor Called”,“Dispatched”,“Waiting”}; VAR UD = db.Updates 。凡(C =>!c.Sold && validStatuses.Contains(c.Status)) .GroupBy(C => c.Vehicle) 。选择(X => X .OrderByDescending(y => y.TimeStamp).First())。ToList(); 它返回多个条目,因为“状态”子句需要在日期之后发生,以便只有当状态是我们数组中的状态时才返回最近的条目。 对不起...你能帮忙吗? – PaulBinCT2

+0

男人,我不知道我是否得到它。 你能展示回报和你的期望吗? 但是,我认为First()必须放在Select()之后。 例如: 选择(x => x.OrderByDescending(y => y.TimeStamp))。First() –

0

尝试使用||或运营商

(c.Status.Equals(("Pending")|| c.Status.Equals("Rejected"));