LINQ:我如何通过数组字符串使用 where 条件多值?
LINQ: How i can user where condition multi value by array string?
我想使用 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?
请帮助我。提前致谢 ;)
也许你可以试试:
var queryData = from p in allFiles.AsQueryable()
where subPmnCode.Any(val => p.PmnCode.Contains(val))
select p;
var queryData = from d in allFiles.AsQueryable()
where (subPmnCode.Any(s => s.Trim().Equals(d)))
select d;
检查 d 是否匹配 subPmnCode 数组中的任何元素。我使用 trim 来确保我们忽略通过使用逗号分隔符
将字符串拆分为数组而生成的空格
我想使用 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?
请帮助我。提前致谢 ;)
也许你可以试试:
var queryData = from p in allFiles.AsQueryable()
where subPmnCode.Any(val => p.PmnCode.Contains(val))
select p;
var queryData = from d in allFiles.AsQueryable()
where (subPmnCode.Any(s => s.Trim().Equals(d)))
select d;
检查 d 是否匹配 subPmnCode 数组中的任何元素。我使用 trim 来确保我们忽略通过使用逗号分隔符
将字符串拆分为数组而生成的空格