0

我正在使用 LINQ to SQL 从一组数据库表中获取数据。数据库设计是这样的:给定一个表(表 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有点帮助,但我想确保返回的集合只包含一个实例而不是更多。

4

1 回答 1

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

与您当前的代码相比,这样做的好处是它将避免多次评估查询。

于 2012-08-06T18:11:59.593 回答