为了账号安全,请及时绑定邮箱和手机立即绑定

通过多个语句过滤数据表

通过多个语句过滤数据表

C#
米琪卡哇伊 2023-06-25 14:36:13
我有一个名为Designs我根据从用户收到的值列表过滤此表List<Guid> values = new List<Guid>();foreach (var checkbox in cbo){    //logic to fill list...}一旦我这样做了,我就会使用 LINQ 过滤我的数据表:designs = Designs.AsEnumerable()       .Where(row => values.Contains(row.Field<Guid>("DesignGroupId"))).CopyToDataTable();而且效果非常好。但现在我想在查询中添加一个条件。我想要获得具有 field 的列"DesignKey" = null。所以我尝试:designs = Designs.AsEnumerable()       .Where(row => values.Contains(row.Field<Guid>("DesignGroupId")) && row.Field<int>("DesignKey") == null).CopyToDataTable();但我得到一个例外:System.InvalidOperationException:“源不包含 DataRows。”我究竟做错了什么?问候
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

首先要知道哪个方法抛出异常。

在您的情况下,CopyToDatabase 方法将抛出此异常,如下所述:

无效操作异常

源序列不包含任何 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();

}

而且这更容易调试,因为您可以使用调试器逐行进行调试。您可以稍后压缩代码。


查看完整回答
反对 回复 2023-06-25
?
达令说

TA贡献1821条经验 获得超6个赞

你不能 CopyToDataTable null


这对你有用:


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();

}


查看完整回答
反对 回复 2023-06-25
  • 2 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信