【问题标题】:Join 2 arrays using LINQ with condition使用带有条件的 LINQ 连接 2 个数组
【发布时间】:2017-08-17 07:04:03
【问题描述】:

我有两个从数据表转换而来的数组。

我需要在一个条件下加入两个数组,然后将最终结果数据绑定到一个 ListView。

第一个数组只有一列,第二个有几列。我需要加入它们,其中 searchResults 上的 txtItemA 列等于 queryResults 列上的 txtItemNumber 。

即使我在正确的轨道上,我也不确定。 Visual Studio 在此行的 searchresults 下显示一条红线....

var showResults = from a in searchResults

我的代码...

ArrayList searchResults = new ArrayList();
foreach (DataRow dataRow in dt2.Rows)
    searchResults.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString())));

ArrayList queryResults = new ArrayList();
foreach (DataRow dataRow in dt2.Rows)
    queryResults.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString())));


var showResults = from a in searchResults
                  join b in queryResults on b.txtItemNumber equals a.txtItemA
                  select new
                  {
                      newseries = searchResults.newseries,
                      series = searchResults.series
                  };

ListView1.DataSource = showResults.ToArray();
ListView1.DataBind(); 

我尝试使用 Gilad Green 的这段代码...

List<string> searchResults = new List<string>();
foreach (DataRow dataRow in dt2.Rows)
    searchResults.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString())));

List<string> queryResults = new List<string>();
foreach (DataRow dataRow in dt2.Rows)
    queryResults.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString())));

var showResults = searchResults.Where(item => queryResults.Contains(item.txtItemA)
    .Select(item => new {
                            newseries = item.newseries,
                            series = item.series
                        }));

我仍然无法让它工作..

行中的项目错误.....Select(item => new {

参数或局部变量不能与方法类型参数同名

和txtItemA

字符串确实包含 txtItemA 的定义并且没有扩展方法....

【问题讨论】:

  • ba 都是字符串时,你如何加入b.txtItemNumber equals a.txtItemA
  • 您使用的是类型化数据行吗?如果可以,您可以发布一个示例吗?

标签: c# asp.net arrays linq


【解决方案1】:

尝试以下操作,它使用标准 DataRows,我根据您的示例代码猜测字段名称。

        DataTable dt2 = new DataTable();

        var showResults = dt2.Rows.Cast<DataRow>().Join(dt2.Rows.Cast<DataRow>(), a => a.Field<string>("txtItemNumber"), b => b.Field<string>("txtItemA"), (a, b) => new
        {
            newseries = a.Field<string>("newseries"),
            series = a.Field<string>("series")
        });

        ListView1.DataSource = showResults.ToArray();
        ListView1.DataBind();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多