【问题标题】:LINQ: How i can user where condition multi value by array string?LINQ:我如何通过数组字符串在哪里使用条件多值?
【发布时间】:2017-04-06 05:26:05
【问题描述】:

我想使用 linq,其中数组字符串的条件多值是split(',') 我列出文件夹中数据文件中的数据。 (不在数据库中)

代码 c#

public List<sFile> GettingFiles(string path)
{
    //Read File in folder
    List<sFile> allfile = new List<sFile>(); 
    DirectoryInfo di = new DirectoryInfo(path);
    FileInfo[] fileinfo = di.GetFiles("*.*");

    foreach (FileInfo item in fileinfo)
    {
        allfile.Add(new sFile
        {
            FileName = item.Name,
            Seq = int.Parse(item.Name.Substring(12, item.Name.Length - 12)),
            PmnCode = item.Name.Substring(7, item.Name.Length - 12),
            Path = item.DirectoryName,
            Size = formatSize(item.Length),
            SizeInt = int.Parse(item.Length.ToString())
        });
    }
    return allfile;
}

public void btnQuery_Click(object sender, EventArgs e)
{
    List<sFile> allFiles = GettingFiles(path); //List file in Folder
    string pmnCode = txtPMNCode.Text.ToString(); //AAAA, BBBBB, CCCCC, DDDDD
    string[] subPmnCode = pmnCode.Split(',');
    string totalPmnCode = string.Empty;

    foreach (string item2 in subPmnCode)
    {
        var queryData = from d in allFiles.AsQueryable()
                    where (d.PmnCode.Contains(item2))
                    select d;                       

        //Add Column
        DataTable dt = new DataTable();
        dt.Columns.Add(enmField.NAME.ToString());
        dt.Columns.Add(enmField.SIZE.ToString());
        dt.Columns.Add(enmField.MODIFY_DATE.ToString());
        dt.Columns.Add(enmField.PATH.ToString());

        DataRow myRow = dt.NewRow();

        foreach (sFile item in queryData.ToList())
        {
             myRow = dt.NewRow();
             myRow[enmField.NAME.ToString()] = item.FileName.Trim();
             myRow[enmField.SIZE.ToString()] = item.Size.Trim();
             myRow[enmField.MODIFY_DATE.ToString()] = item.Date;
             myRow[enmField.PATH.ToString()] = item.Path.Trim() + "\\" + item.FileName.Trim();
     dt.Rows.Add(myRow);
        }

        gvDetail.DataSource = dt;
        gvDetail.DataBind();
    }
}

示例数据

Pmn Code
AAAAA
BBBBB
CCCCC
DDDDD

我想通过pmn_code查询条件是AAAAA,BBBBB,DDDDD 我要显示数据

var queryData = from d in allFiles.AsQueryable()
                where (d.PmnCode.Contains("AAAAA") &&
                d.PmnCode.Contains("BBBBB") &&
                d.PmnCode.Contains("DDDDD")
)
                select d;  

但我不能按结果查询数组字符串。 如何使用数组 linq?

请帮助我。谢谢提前;)

【问题讨论】:

  • 你能展示一下你的表格的结构吗?
  • 到目前为止,您的查询返回的文件必须具有这样的名称:AAAAA_BBBBB_DDDDD 你的意思是可能是|| 吗?

标签: c# arrays linq where-clause asqueryable


【解决方案1】:

也许你可以试试:

var queryData = from p in allFiles.AsQueryable()
                where subPmnCode.Any(val => p.PmnCode.Contains(val))
                select p;

【讨论】:

  • 非常感谢。它的工作;D
【解决方案2】:
var queryData = from d in allFiles.AsQueryable()
                where (subPmnCode.Any(s => s.Trim().Equals(d)))
                select d;

检查 d 是否匹配 subPmnCode 数组中的任何元素。我使用 trim 来确保我们忽略通过使用逗号分隔符将字符串拆分为数组而生成的空格

【讨论】:

  • 请提供一些信息为什么这个 LINQ 语句可以解决问题中描述的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2015-10-30
相关资源
最近更新 更多