LINQ选择第一行

时间:2009-10-03 00:58:43

标签: linq select

如何在不使用foreach的情况下选择linq select语句中的第一行?

我使用foreach然后休息;但它必须是更好的方式吗?

我喜欢在第一行获得价值;加上检查是否找不到行。 我的问题是在没有foreach声明的情况下获得价值。

我所做的是在我的DataTable中找到一个值,我知道该行是独一无二的;所以我喜欢做一个选择并获得价值;加上检查是否没有安全命中......:)

这是我现在使用的代码,见下文

谢谢你, 符文

var var_QUERY_linq = 
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
    where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
    select vm_TABLE_PK;

foreach ( DataRow o_DataRow in var_QUERY_linq )
{
       vmp_Return_string = o_DataRow.Field<string>( "Myfield_nvarchar" );

       break;
}

4 个答案:

答案 0 :(得分:39)

只需使用.FirstOrDefault()

即可
var var_QUERY_linq = (
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
    where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
    select vm_TABLE_PK).FirstOrDefault();

if(var_QUERY_linq != null)
{
    //There is a record
}

答案 1 :(得分:4)

.First()将只接受第一个或.Single()将接受第一个并且如果有更多则引发异常

答案 2 :(得分:3)

当我使用FirstOrDefault查找列表中的第一个项目时,我解决了项目(OrderBy)的顺序问题。

我建议您使用TAKE来获取第一项:

var_QUERY_linq.Take(1).FirstOrDefault()

*如果可能,请始终使用sql profiler检查发送到SQL Server的查询。

答案 3 :(得分:0)

我认为MyField是你想要获得

值的字段
var result = vm_Table_Pk.DefaultIfEmpty().First().MyField;

您还可以设置除NULL之外的默认结果。喜欢:

var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField;

不要担心Intellisense会帮助你这样做。