【问题标题】:How to check a value is there or not in a column of a data table?如何检查数据表的列中是否存在值?
【发布时间】:2012-01-26 15:08:24
【问题描述】:

我有以下 DataTable -> dtFinance

ID Account Name Quarter FY   Income_Percent  
1  ABC     Ram  Q1      2011  50  
2  XYZ     Hari Q4      2011  35  
3  ABC     Rohit Q3     2011  40  
4  ABC     Ram  Q2      2011  25  
5  XYZ     Hari Q3      2011  60  

在上面的数据中,我想检查上面的DataTable中是否存在Q3。如果存在,那么我想获得该季度的收入百分比和人的姓名

如何使用 LINQ 编写查询?

【问题讨论】:

    标签: c# linq c#-4.0 .net-3.5 .net-4.0


    【解决方案1】:
    var query = (
      from myRow in _db.dtFinance
      where myRow.Quarter == "Q3"
      select new { myRow.Name, myRow.Income_Percent }
    );
    

    要确定是否有任何匹配项,请使用:

    if (query.Any()) ...
    

    要获取第一项的 Name 和 Income_Percent,您可以:

    var firstRow = query.First();
    string name = firstRow.Name;
    int incomePercent = firstRow.Income_Percent;
    ...
    

    只需 1 个 db 调用即可完成这两项工作,您可以:

    var firstRow = query.FirstOrDefault();
    if (firstRow != null) {
        string name = firstRow.Name;
        int incomePercent = firstRow.Income_Percent;
        ...
    }
    

    更多信息,我推荐https://stackoverflow.com/questions/47740/what-are-some-good-linq-resources
    另外,我喜欢LINQPad,你可能会觉得它很有趣。您可以轻松地测试这些代码 sn-ps,并可以试验 LINQ 语言和您的数据库。

    【讨论】:

    • 假设如果上表中没有Q3,那么如何先处理验证,然后如果验证通过则得到结果。怎么样??
    • 这是一个数据表。也请帮助我正确的数据类型。因为这里 Quarter 是“字符串”类型,而 Income_Percent 是“int”数据类型。帮我处理 datatable.AsEnumerable
    • 如果它不存在那么验证是什么?
    【解决方案2】:

    @Scott Ripley 的答案就是你想要的。我只是想抛出另一个使用方法语法的 linq 示例。您看到的大多数示例都是查询语法,但我通常更喜欢简单场景的方法语法。

    var row = _db.dtFinance.FirstOrDefault(x => x.Quarter == "Q3");
    if (row != null)
    {
        var name = row.Name;
        var incomePercent = row.Income_Percent;
        ...
    }
    

    我也强烈推荐LINQPad - 很棒的软件。

    【讨论】:

    • 是的,我完全同意“方法语法”(在技术上是这样称呼的吗?)...我完全是面向对象编程的,所以我在面向对象编程中思考,并且 LINQ 语法总是让我慢下来!然而,有时它不那么冗长,更容易阅读,所以它确实有它的用途。
    • 是的,“查询语法”和“方法语法”是微软对它们的称呼 - msdn.microsoft.com/en-us/library/bb397947.aspx。当我必须进行大量分组时,我发现自己使用查询语法。
    猜你喜欢
    • 2019-11-13
    • 2013-07-16
    • 2012-05-29
    • 1970-01-01
    • 2012-07-26
    • 2017-09-06
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多