lambda 表达式中的 if 语句和赋值
本文关键字:语句 赋值 if 表达式 lambda | 更新日期: 2023-09-27 18:36:13
我有一个lambda语句,它的映射如下:
public enum Status
{
Completed,
InComplete,
Ok
}
查询:
var courses = query.Select(c => new SomeModel
{
Status = c.someQuery() ? Status.Completed : Status.Ok
});
所以我希望 Status 有多个 if 语句,而不仅仅是三元运算。例如。
var courses = query.Select(c => new SomeModel
{
Status = if(c.someQuery())
{
return Status.Completed;
}
else if(c.someOtherQuery())
{
return Status.InComplete;
}
else if(c.someOtherQuery1())
{
return Status.Ok;
}
});
那么我该如何完成这样的事情呢?我正在使用实体框架ORM。
你可以嵌套你的三元运算:
Status = c.someQuery() ? Status.Completed :
c.someOtherQuery() ? Status.InComplete : Status.Ok
你能这样做吗?
myObjects
.Where(d => d.isTrue == true && d.Value == 77)
.Update(e => { e.Value = 1; e.isTrue = false; } );
小心使用我的linq,它随时可能爆炸;-)
/// <summary>
/// Used to modify properties of an object returned from a LINQ query
/// </summary>
/// <typeparam name="TSource">The type of the source.</typeparam>
/// <param name="input">The source</param>
/// <param name="updater">The action to perform.</param>
public static TSource Update<TSource>(this TSource input, Action<TSource> updater)
{
if (!updater.IsNull() && !input.IsNull())
{
updater(input);
}
return input;
}
为了充分解释这一点:
public DataRow DoSomething(DataRow dataRow)
{
//DoSomething
return dataRow;
}
var query = from dataRow in myDataTable.Rows.Cast<DataRow>()
where
Double.TryParse(dataRow["Distance"].ToString(), out distance)
&& distance > (11) && distance <= 99
select dataRow.Update(f => DoSomething(f));
所以你可以运行一个方法(someOtherQuery)并在LINQ中返回一个枚举,而无需嵌套(这是baaaaaaad...恕我直言)。
由于该逻辑无法转换为 T-SQL 语句,因此需要在内存中执行此操作。我要做的是将该逻辑添加到您的模型中:
var courses = query.ToList().Select(c => new SomeModel
{
Status = c.GetStatus();
});
public class SomeModel
{
...
public Status GetStatus()
{
if(this.someQuery())
{
return Status.Completed;
}
else if(this.someOtherQuery())
{
return Status.InComplete;
}
else if(this.someOtherQuery1())
{
return Status.Ok;
}
...
}
}
请注意,调用ToList()
将使用 EntityFramework 执行查询,并且将针对对象列表执行Select
。