在Linq数据集中获取动态字段. [英] Get Dynamic fields in Linq DataSet.

查看:58
本文介绍了在Linq数据集中获取动态字段.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的所有人,

我对LINQ to DataSet有问题

//我有一个包含2个DataTable的DataSet
DataTable dt1 = GetDataTable("B0");
DataTable dt2 = GetDataTable("TH");

ds = new DataSet();

ds.Tables.Add(dt1);
ds.Tables.Add(dt2);

  var 查询= 来自 mainRow  ds.Tables [mainTable] .AsEnumerable()
            加入 joinRow 中ds.Tables [joinTable] .AsEnumerable()
            在mainRow.Field< string>(rowRelation [" ].ToString().Trim()上)
            等于joinRow.Field< string>(rowRelation [" ].ToString().Trim() )
            选择 
            {
                 BLDGCODE = mainRow [" ],
                BLDGDESC = mainRow [" ],
                .... 
            }; 



好的.上面的代码可以正常工作,它将返回2个字段:BLDGCODE和BLDGDESC

我想传递一个字段数组.它可能是一个数组,DataTable.例如:

 私有 字符串 [] FieldList()
{
   字符串 [] fieldList =  字符串 [ ]
   {
      " " " ,
      .....
      " 
   }
} 



请帮我解决这个问题.

非常感谢.

解决方案

您可能正在寻找将运行时生成的两个数据表结合在一起的方法.查看此链接.可能对您有用

http://stackoverflow. com/questions/5259711/finding-common-columns-from-two-datatable-and-using-those-for-join-condition-in [ ^ ]

不要在数据集上使用linq,而是尝试在两个数据表上使用joinview,然后选择所需的列
http://www.vb-tips.com/JoinView.aspx


 ....
mainTable = rowRelation [" ].ToString().Trim();
                joinTable = rowRelation [" ].ToString().Trim();
                字符串 mainAlias = rowRelation ["  ] .ToString().Trim();
                字符串 joinAlias = rowRelation ["  ] .ToString().Trim();

                 var  query2 = 来自 ds  mainRow中的.表格[mainTable] .AsEnumerable()
                        加入 joinRow 中ds.Tables [joinTable] .AsEnumerable()
                        在mainRow.Field< string>(rowRelation [" ].ToString().Trim()上)等于joinRow.Field< string>(rowRelation [" ].ToString().Trim( ))
                        选择 GetColumns(mainRow,joinRow,mainTable,dtFields);

                 foreach (IDictionary< string,>  in  query2)
                {
                    r = dtResult.NewRow();

                     foreach (字符串成对中的键. )
                    {
                        r [key] = pair [key];
                    }

                    dtResult.Rows.Add(r);
                }

....


/*   ************************ ***********************************************/
私有 IDictionary< string,>  GetColumns(DataRow mainRow,DataRow joinRow,>  exp =  ExpandoObject();

            字符串列= " ,aliasTable = " ;

             foreach (DataRow rcolumn  in  dtColumnsToUse.Rows中)
            {
                column = rcolumn [" ].ToString().Trim();
                aliasTable = rcolumn [" ].ToString().Trim();

                如果(aliasTable == mainTable)
                {
                    exp [column] = mainRow [column];
                }
                其他
                {
                    exp [column] = joinRow [column];
                }
            }

            返回 exp;
        }
</ 字符串 >  </ 字符串 >  


Dear All,

I have a problem with LINQ to DataSet

//I have a DataSet it contain 2 DataTable
DataTable dt1 = GetDataTable("B0");
DataTable dt2 = GetDataTable("TH");

ds = new DataSet();

ds.Tables.Add(dt1);
ds.Tables.Add(dt2);

var query = from mainRow in ds.Tables[mainTable].AsEnumerable()
            join joinRow in ds.Tables[joinTable].AsEnumerable()
            on mainRow.Field<string>(rowRelation["RFIELD"].ToString().Trim())
            equals joinRow.Field<string>(rowRelation["RFIELD"].ToString().Trim())
            select new
            {
                BLDGCODE = mainRow["BLDGCODE"],
                BLDGDESC = mainRow["BLDGDESC"],
                ....
            };



OK. Code above will work fine, It will return 2 field: BLDGCODE and BLDGDESC

I would like to pass a array of field. It may be an array, DataTable. Ex:

private string[] FieldList()
{
   string[] fieldList = new string[]
   {
      "FIELD1",
      "FIELD2",
      "FIELD3",
      .....
      "FIELDn"
   }
}



Please help me a suggestion for this issue.

Thank you very much.

解决方案

you might be looking to join the two data tables which are generated on runtime. Check out this link. Might be useful for you

http://stackoverflow.com/questions/5259711/finding-common-columns-from-two-datatable-and-using-those-for-join-condition-in[^]


Instead of using linq to dataset, try using joinview on both datatable and then select columns you want
http://www.vb-tips.com/JoinView.aspx


....
mainTable = rowRelation["INTOFILE"].ToString().Trim();
                joinTable = rowRelation["FILE_CODE"].ToString().Trim();
                string mainAlias = rowRelation["INTOFILE"].ToString().Trim();
                string joinAlias = rowRelation["FILE_CODE"].ToString().Trim();

                var query2 = from mainRow in ds.Tables[mainTable].AsEnumerable()
                        join joinRow in ds.Tables[joinTable].AsEnumerable() 
                        on mainRow.Field<string>(rowRelation["RFIELD"].ToString().Trim()) equals joinRow.Field<string>(rowRelation["RFIELD"].ToString().Trim())
                        select GetColumns(mainRow, joinRow, mainTable, dtFields);

                foreach (IDictionary<string,> pair in query2)
                {
                    r = dtResult.NewRow();

                    foreach (string key in pair.Keys)
                    {
                        r[key] = pair[key];
                    }

                    dtResult.Rows.Add(r);
                }

....


/********************************************************************/
private IDictionary<string,> GetColumns(DataRow mainRow, DataRow joinRow, string mainTable, DataTable dtColumnsToUse)
        {
            IDictionary<string,> exp = new ExpandoObject();

            string column = "", aliasTable = "";

            foreach (DataRow rcolumn in dtColumnsToUse.Rows)
            {
                column = rcolumn["FIELD_NAME"].ToString().Trim();
                aliasTable = rcolumn["FILE_CODE"].ToString().Trim();

                if (aliasTable == mainTable)
                {
                    exp[column] = mainRow[column];
                }
                else
                {
                    exp[column] = joinRow[column];
                }
            }

            return exp;
        }
</string></string>


这篇关于在Linq数据集中获取动态字段.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆