我使用的.Net framwork 4.0 WinForm应用程序组件DataGridView,并设置DataSource有DataTable.然后有一个按钮来添加行插入DataGridView.
这样的代码.
gridTable = (DataTable)dgrMainGrid.DataSource;
DataRow dr = gridTable.NewRow();
Run Code Online (Sandbox Code Playgroud)
在将New Row添加到DataTable之前,我检查了是否有重复的行.为此,我使用了此LINQQuery.
//Item Code cannot duplicate
var results = from itmCode in gridTable.AsEnumerable()
where (itmCode.Field<string>("Item Code") == txtGrdItmLoc.Text)
select itmCode;
Run Code Online (Sandbox Code Playgroud)
在我如何检查数据表中是否有可用的重复行之后?
if(//doWhatever function here ){
//if there's duplicate row values
isNotDuplicate = false;
}
else{
isNotDuplicate=true;
}
Run Code Online (Sandbox Code Playgroud)
在进入下面的步骤之前,我需要得到是否有重复,并将其设置为isNotDuplicate变量或类似的东西来检查.所以我认为计算results行但是没有这样的函数可以计算'var results`,有没有可能做到这一点?
if (!isDuplicate)
{
dr["#"] = true;
dr["Item Code"] = lSysItemCode;
dr["Stock Code"] = txtGdrItmItemLoc.Text;
dr["Brand"] = txtGrdItmBrand.Text;
dr["Model No"] = cmbGrdItmModel.SelectedValue.ToString();
gridTable.Rows.Add(dr);
dgrMainGrid.DataSource = gridTable;
}
Run Code Online (Sandbox Code Playgroud)
我可以用
for loop用DataTable,并检查它是否是含有相当于新价值"产品编号",但我期待与LINQ的替代方法.
简单地说,我正在使用linq替换它.
foreach (DataRow r in gridTable.Rows) {
if (r["Item Code"].ToString() == txtGrdItmLoc.Text) {
isDuplicate = true;
}
}
Run Code Online (Sandbox Code Playgroud)
示例项目:http://1drv.ms/1K4JnHt
首先将其转换为 IEnumerable :
将 DataRowCollection 转换为 IEnumerable<T>
然后,您可以使用 LINQ 扩展方法执行类似的操作(检查所有具有重复项的值):
var duplicates = resultsList.Where(r => resultsList.Count(r2 => r2.Field<string>("Item Code") == r.Field<string>("Item Code")) > 0);
Run Code Online (Sandbox Code Playgroud)
如果您想检查每个值是否重复,可以使用.Count方法,如下所示:
bool hasDuplicates = resultsList.Count(r2 => r2.Field<string>("Item Code") == "your code") > 1;
Run Code Online (Sandbox Code Playgroud)
好的,如果由于某种原因这不起作用,你可以自己编写这个函数:
public static class Helper
{
// or other collection type
public static int MyCount<T>(this IEnumerable<T> collection, Func<T, bool> function)
{
int count = 0;
foreach (T i in collection)
if (function(i)) ++count;
return count;
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
results.MyCount(r => r.Field<string>("Item Code") == "Item Code");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |