从LINQ查询中选择一个唯一的实例

时间:2012-08-06 18:09:19

标签: linq linq-to-sql

我正在使用LINQ to SQL从一组数据库表中获取数据。数据库设计是这样的:给定一个表中的唯一ID(表A),应该从关联表中返回一个且只有一个实例(表B)。

是否有更简洁的方法来撰写此查询并确保只返回一个项目而不使用如下所示的.Count()扩展方法:

var set = from itemFromA in this.dataContext.TableA
          where itemFromA.ID == inputID
          select itemFromA.ItemFromB;

if (set.Count() != 1)
{
    // Exception!
}

// Have to get individual instance using FirstOrDefault or Take(1)

FirstOrDefault有所帮助,但我想确保返回的集合只包含一个实例,而不是更多。

1 个答案:

答案 0 :(得分:2)

听起来你想要Single

var set = from itemFromA in this.dataContext.TableA
          where itemFromA.ID == inputID
          select itemFromA.ItemFromB;

var onlyValue = set.Single();

文档说明:

  

返回序列的唯一元素,如果序列中没有一个元素,则抛出异常。

当然这意味着您无法自定义异常消息...如果您需要这样做,我会使用以下内容:

// Make sure that even if something is hideously wrong, we only transfer data
// for two elements...
var list = set.Take(2).ToList();
if (list.Count != 1)
{
    // Throw an exception
}
var item = list[0];

这对您当前代码的好处是它将避免多次评估查询。