7

我希望获得我意识到“Take() 不起作用的第一条记录。

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

List<string> etchList = new List<string>();
etchList.Add("709");

Linq 查询是

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

现在这个“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"

编辑:

好的,此代码存在:

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; }

  }

然后这个列表

  var AddPlas = new List<AddPla>();
4

3 回答 3

12

我不认为这很容易First()吗?

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

更新

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

select new { EtchVectors = vio.Shapes.First() }
于 2013-05-08T22:35:15.500 回答
5

您可以尝试使用FirstOrDefault

var query = (from vio in AddPlas
            where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID))
            select new
            {
                EtchVectors = vio.Shapes
            }).FirstOrDefault();
于 2013-05-08T22:35:45.317 回答
0

使用该FistOrDefault方法安全地返回查询中的第一项,或者null如果查询没有返回结果:

var result =
    (from vio in AddPlas
     where etchList.Any(vioID => vio.Key.Formatted.Equals(vioID))
     select new
     {
        EtchVectors = vio.Shapes.FistOrDefault()
     })

或等效地:

var result = AddPlas.Where(x => etchList.Any(y => x.Key.Formatted.Equals(y)))
                    .Select(x => new { EtchVectors = x.Shapes.FistOrDefault() });
于 2013-05-08T22:37:24.173 回答