C# LINQ:如何检索单个结果



linq来说有点新,

使用 LINQ 检索单个结果的最简单方法是什么?

示例,我的查询

var query =
     from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target;

它应该只返回一个具有双精度值的字段。 如何将其从查询中提取出来?过去我使用过ExecuteScalar。如何使用 linq 执行此操作?我想保留其数据类型

更新:

这就是我现在所处的位置。问题是此处运行的测试查询 im 返回 4 而不是 3.75

var query =
                (from a in db.LUT_ProductInfos
                 where a.flavor == "Classic Coke" && a.Container == "Can"
                 select new { a.co2High }).Single();
            double MyVar = query.co2High.Value;

我想你的意思是返回一个值,而不是一个记录? 您需要执行以下操作select new {}

var query =
     from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select new { c.co2Target };

然后,如果您只想检索单个记录以及:

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select new { c.co2Target }).Single();

检索将按如下方式完成:

var query =
         (from c in db.productInfo
         where c.flavor == "Classic Coke" && c.container == "Can"
         select new { c.co2Target }).Single();
double MyVar = query.co2Target;

使用 .Single().SingleOrDefault() 扩展方法。

var query =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();

通过使用First()FirstOrDefault()

var query =
    (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).FirstOrDefault();

仅当您知道只有一个结果时,或者如果有多个结果时想要失败,才使用 Single()SingleOrDefault()

您可以使用Single扩展方法:

var result =
     (from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target).Single();

其他相关的扩展方法有SingleOrDefaultFirstFirstOrDefault

"单一"

和"第一个"之间的区别在于,如果查询产生多个结果,则"单一"将引发异常。如果查询未返回任何结果,则 OrDefault 变体将返回 null,而 Single 和 First 引发异常则表示不存在结果。

如果您使用的是实体框架 3.5,则它不支持 Single ,因此您必须使用 First

另一件值得注意的事情是,您的原始代码导致了IQueryable<T>,这意味着在您评估结果之前,它实际上不会执行查询。使用这些扩展方法中的任何一种都将强制查询立即运行。

msdn : SingleOrDefault

利用Single()SingleOrDefault()方法获得结果

另请检查:默认扩展方法

如果您的查询始终只返回一个元素作为结果,请使用SingleOrDefault(),或者如果查询的结果是多个元素,则会引发异常。

(from c in db.productInfo
 where c.flavor == "Classic Coke" && c.container == "Can"
 select c.co2Target).SingleOrDefault();

如果您的结果有多个元素,并且您需要其中任何一个元素,请使用FirstOrDefualt()

(from c in db.productInfo
 where c.flavor == "Classic Coke" && c.container == "Can"
 select c.co2Target).FirstOrDefault();
string str = (
  from c in db.productInfo 
  where c.flavor == "Classic Coke" && c.container == "Can"
  select c.co2Target)
    .Single().columnName;

我更喜欢 SingleOrDefault(),如果什么都没有返回,它不会抛出异常。MSDN 参考

这样,您可以对这种情况进行安全防护条件检查。

var query = (from c in db.productInfo where c.flavor == "Classic Coke" && c.container == "Can"
                 select c.co2Target).SingleOrDefault();

相关内容

  • 没有找到相关文章

最新更新