我有一个名为wia
的数据表
我根据从用户那里收到的值列表来过滤该表
Designs
一旦我这样做,我将使用LINQ筛选数据集:
List<Guid> values = new List<Guid>();
foreach (var checkbox in cbo)
{
//logic to fill list...
}
效果很好。但是现在我想向查询添加一个条件。我想获取具有字段designs = Designs.AsEnumerable()
.Where(row => values.Contains(row.Field<Guid>("DesignGroupId"))).CopyToDataTable();
的列。所以我尝试:
"DesignKey" = null
但我有一个例外:
System.InvalidOperationException:“源不包含DataRows。”
我在做什么错?问候
答案 0 :(得分:1)
第一件事就是知道哪个方法引发了异常。
对于您而言,如here所述,CopyToDatabase方法将引发此异常:
InvalidOperationException
源序列不包含任何DataRow对象。
为确保这一点,您可以拆分请求:
var designEnum= Designs.AsEnumerable();
var firstSelect = designEnum.Where(row => values.Contains(row.Field<Guid>("DesignGroupId"));
var secondSelect = firstSelect.Where(row => row.Field<int>("DesignKey") == null);
if (secondSelect.Count == 0)
{
//Handle the fact that you have no data
design = null;
}
else
{
designs = secondSelect.CopyToDataTable();
}
这很容易调试,因为您可以与调试器逐行进行。您可以稍后压缩代码。
答案 1 :(得分:0)
您不能将CopyToDataTable空
这将为您工作:
void Main()
{
DataTable Designs = new DataTable();
Designs.Columns.Add("DesignGroupId", typeof(Guid));
Designs.Rows.Add(Guid.NewGuid());
Designs.Rows.Add(Guid.NewGuid());
Designs.Rows.Add(Guid.NewGuid());
Designs.Rows.Add(Guid.Parse("7c176832-593c-402f-9def-fbe12da3742f"));
List<Guid> values = new List<Guid>();
values.Add(Guid.NewGuid());
values.Add(Guid.NewGuid());
values.Add(Guid.NewGuid());
//values.Add(Guid.Parse("7c176832-593c-402f-9def-fbe12da3742f"));
var res = Designs.AsEnumerable().Where(row => values.Contains(row.Field<Guid>("DesignGroupId"))).ToList();
if (res.Count > 0 )
Designs = res.CopyToDataTable();
else
Designs.Clear();
}