C# 我能把这段代码简化为一行吗
如果(strFilter==“”),是否可以简化此操作并仅在一行中使用它,而不使用C# 我能把这段代码简化为一行吗,c#,entity-framework,lambda,C#,Entity Framework,Lambda,如果(strFilter==“”),是否可以简化此操作并仅在一行中使用它,而不使用if(strFilter==“”): if (strFilter == "") { IList<User> users = Context.Users.Where(u => u.Location == "UK").ToList(); } else { IList<User> users = Context.Users.Where(u => u.Location =
if(strFilter==“”):
if (strFilter == "")
{
IList<User> users = Context.Users.Where(u => u.Location == "UK").ToList();
}
else
{
IList<User> users = Context.Users.Where(u => u.Location == "UK" && u.JobTitle == strFilter).ToList();
}
if(strFilter==“”)
{
IList users=Context.users.Where(u=>u.Location==“UK”).ToList();
}
其他的
{
IList users=Context.users.Where(u=>u.Location==“UK”&&u.JobTitle==strFilter.ToList();
}
那么:
var users = Context.Users.Where(u => u.Location == "UK" && (strFilter == "" || u.JobTitle == strFilter));
也可以使用条件运算符尝试此操作:
User user = Context.Users.Where(u => u.Location == "" ? u.Location == "" : u.Location == "UK" && u.JobTitle == strFilter);
你的代码根本不会编译,因为Where
返回IEnumerable
而不是单个对象User
。此外,一行代码并不总是比清晰的if..else
好。但是您需要在外部声明User
,然后您可以在if…else
中初始化它,然后再访问它。避免strFilter==”
,改用string.IsNullOrEmpty(strFilter)
是的,您是对的,蒂姆,更正。@Whistler:仍然不正确,ToList
返回一个列表
而不是一个用户
。哇,太棒了,太简单了。还感谢@Whistler,值得注意的是,此解决方案正确地标识了原始linq语句返回的是一个用户集合,而不是单个用户。是的,这是一个很好的示例,说明了为什么您通常更喜欢使用if…else
;-)@蒂姆·施梅尔特:我发帖晚了一点,所以准确的答案就在我面前发了出来。所以我用另一种方式。