C# 我能把这段代码简化为一行吗

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 =

如果(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 == "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
;-)@蒂姆·施梅尔特:我发帖晚了一点,所以准确的答案就在我面前发了出来。所以我用另一种方式。