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

从LINQ查询中选择一个唯一实例,linq,linq-to-sql,Linq,Linq To Sql,我使用LINQtoSQL从一组数据库表中获取数据。数据库设计是这样的:给定一个表(表a)的唯一ID,关联表(表B)应该返回一个且只有一个实例 是否有一种更简洁的方法来组合此查询并确保只返回一个项目,而不使用下面的.Count()扩展方法: var set = from itemFromA in this.dataContext.TableA where itemFromA.ID == inputID select itemFromA.ItemFromB;

我使用LINQtoSQL从一组数据库表中获取数据。数据库设计是这样的:给定一个表(表a)的唯一ID,关联表(表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
有些帮助,但我想确保返回的集合只包含一个实例,而不包含更多实例。

听起来您希望:

文件规定:

返回序列中唯一的元素,如果序列中没有一个元素,则引发异常

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

// 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];
与您当前的代码相比,这样做的好处是可以避免多次计算查询

// 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];