具有大量 AND/OR 组件的复杂语句难以阅读并且容易出错 - 在普通的 IF 语句中,我可能会使用方法调用来简化 is 语句 - 例如:
if (((user == myUser || user == yourUser) && user != Admin)
&& Something > SomethingElse
&& (thresholdDate > item.itemDate || (item.itemDate == null && item.itemType == itemIsDated))
)
{
DoStuff();
}
我可以重构用户和日期部分以使事情更容易阅读:
if (
UserValid(user)
&& Something > SomethingElse
&& DateIsValid(thresholdDate, item)
)
{
DoStuff();
}
我可以在 LINQ 查询中做什么来简化嵌套的 IF?
例如,如果我有以下内容:
var someResults = DataManager.Things
.Where(item => (item.UserName == currentUser.UserName
|| item.ParentUsername == currentUser.UserName)
&& (item.ItemType == (int) ItemType.MyType
|| item.ItemType == (int) ItemType.YourType)
&& item.Result == null
&& (
(item.Status == null
&& (item.ItemDate < thresholdDate
|| item.ItemType == (int) ItemType.YourType)
)
||
(item.Status != null &&
item.Status != "Rejected")
)
)
** 不是实际代码 - 只是一个简化和通用的示例。
我希望能够将部分逻辑提取到方法中 - 或者以其他方式分离出 AND / OR 混乱,以便清楚发生了什么。
我尝试向“项目”添加一个方法来执行某些逻辑一种 IsValidType(typeOptions) 方法 - 这编译得很好,但 LINQ 抱怨它在运行时无法识别该方法。
我可以在项目上使用一个属性 - 但是我不能传递任何上下文信息(这使得它的使用受到限制)
你如何使这种查询可读?