2

我可以请人帮我用 LINQ 写这个吗,

 DataTable dt = new DataTable();

            DataColumn dcValue = new DataColumn();
            dcValue.ColumnName = "value";

            DataColumn dvDisplay = new DataColumn();
            dvDisplay.ColumnName = "display";

            DataColumn dvIsDefualt = new DataColumn();
            dvIsDefualt.ColumnName = "isDefalt";

            dt.Columns.Add(dcValue,int);
            dt.Columns.Add(dvDisplay,string);
            dt.Columns.Add(dvIsDefualt,bool);

            this.tipRacuna.DataSource = ds.Tables[0];
            this.tipRacuna.ValueMember = "value";
            this.tipRacuna.DisplayMember = "display";

            this.tipRacuna.SelectedValue =  findDefault(dt);//linq to find first value with default = true;    


        }
        private int findDefault(DataTable dtt)
            {
                int i= 0;

            foreach (DataRow  dr in dtt.Rows)
            {
                if (bool.Parse(dr["isDefalt"].ToString()))
                {
                    return int.Parse(dr["value"].ToString());
                }
            }
                return i;
            }

随着我越来越多地参与 C# 和编程,我对 LINQ 查询越来越感兴趣。
一开始我总是跳过 LINQ 的参数,因为我知道 TSQL 不需要另一种查询语言,但是当我看到使用 LINQ 可以节省多少行代码时,我开始学习它。

4

2 回答 2

12

假设您的数据库列是强类型的(最好的):

dtt.AsEnumerable().Where( dr => dr.Field<bool>("isDefault" ) )
    .Select( dr => dr.Field<int>( "value" ) ).FirstOrDefault();

使用类型转换:

dtt.AsEnumerable().Where( dr => Convert.ToBoolean( dr["isDefault"] ) )
    .Select( dr => Convert.ToInt32( dr["value"] ) ).FirstOrDefault();

通过解析:

dtt.AsEnumerable().Where( dr => bool.Parse( dr["isDefault"].ToString() ) )
    .Select( dr => int.Parse( dr["value"].ToString() ) ).FirstOrDefault();

请注意,我已将“isDefalt”的拼写更正为“isDefault”。

于 2012-04-11T14:57:04.540 回答
1

我认为这大致是您所追求的:

dtt.AsEnumerable()
   // find items that match your 'if' condition
   .Where(dr => bool.Parse(dr["isDefalt"].ToString()))
   // perform your int parse
   .Select(dr => int.Parse(dr["value"].ToString()))
   // take the first result
   .FirstOrDefault();
于 2012-04-11T14:58:00.647 回答