从linq查询中获取列表中的第一项

6 c# linq

我希望得到第一条记录,我意识到"Take()将不起作用.

所以我有一个查询另一个列表的List

List<string> etchList = new List<string>();
etchList.Add("709");
Run Code Online (Sandbox Code Playgroud)

Linq查询是

var query = (from vio in AddPlas
            where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID))
            select new
            {
                EtchVectors = vio.Shapes
            }).ToList().Take(1);
Run Code Online (Sandbox Code Playgroud)

现在这个"Take(1)"只有在etchList中有其他数据时才有效,所以它不是我想要的.结果我看起来像这样:

格式化
"clinesegs"1013.98 5142.96"LYR3_SIG2"
"clinesegs"1020.16 5168.33"LYR3_SIG2"
"clinesegs"967.03 5151.31"LYR3_SIG2"
"clinesegs"971.43 5174.01"LYR3_SIG2"

我希望只能回到列表中的第一行

"clinesegs" 1013.98 5142.96 "LYR3_SIG2"
Run Code Online (Sandbox Code Playgroud)

编辑:

好这个代码存在:

public class AddPla
{
public AddPla()
{
    Shapes = new List<Parse>();
}

public Parse Key { get; set; }
public Parse Pla { get; set; }
public Parse Angle { get; set; }
public Parse Default { get; set; }
public List<Parse> Shapes { get; set; }
public Parse DoubleBrace { get; set; }
public Parse Number1 { get; set; }
public Parse Number2 { get; set; }
  }

  public class Parse
  {

public string Formatted { get; set; }
public string Original { get; set; }

  }
Run Code Online (Sandbox Code Playgroud)

然后这个列表

  var AddPlas = new List<AddPla>();
Run Code Online (Sandbox Code Playgroud)

gun*_*171 11

我不觉得它那么容易First()吗?

如果您希望查询不会返回任何结果,请使用 FirstOrDefault()

更新

如果你要求的是" Shapes从每个中获取第一个AddPla",那么将其添加First到你的select陈述中,而不是最后

select new { EtchVectors = vio.Shapes.First() }
Run Code Online (Sandbox Code Playgroud)


Sac*_*hin 5

您可以尝试使用FirstOrDefault.

var query = (from vio in AddPlas
            where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID))
            select new
            {
                EtchVectors = vio.Shapes
            }).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 不需要调用`ToList()`,`FirstOrDefault()`可以对原始的`IEnumerable <T>`进行操作就好了. (2认同)