有没有办法只使用列表中的对象?

时间:2017-07-23 11:03:43

标签: c# linq

我有一个对象列表,比如DataTables。

是否可以仅使用列表中的对象?

例如,如果TableList包含名为a,b,c,d,e的5个DataTable。

select * from table1 where id not in (select t1.id from table1 t1 join table2 t2 on t1.id = t2.table1_id where t2.x = 1 or t2.x = 2);

1 个答案:

答案 0 :(得分:4)

假设TableList的元素类型是引用类型,您可以使用FirstOrDefault()返回第一个匹配或null,然后使用null条件运算符仅在目标为非时调用方法-null:

TableList.FirstOrDefault(t => t.TableName == "a")?.DoStuff();

所以你的原始代码相当于:

var tableA = TableList.FirstOrDefault(t => t.TableName == "a");
if (tableA != null)
{
    tableA.DoStuff();
}
else
{
    TableList.FirstOrDefault(t => t.TableName == "f").DoStuff();
}

或者,如果你要对你最终使用的表做同样的事情,而你只是想获得正确的表,你可以使用或者使用空合并运算符:

// Find an "a" table if possible, but revert to an "f" table otherwise.
var table = TableList.FirstOrDefault(t => t.TableName == "a") ??
            TableList.FirstOrDefault(t => t.TableName == "f");
// Call DoStuff() on the table - handling the case where there isn't an
// "a" or an "f" table.
table?.DoStuff();