在LINQ to SQL中创建自定义Queryable

时间:2018-08-01 14:40:23

标签: c# linq

我想使用Linq to SQL建立高级搜索。
我已经使用article通过Dynamic query with Linq实现了我的目的,但是DynamicLibrary对于某些数据类型(例如日期)有一个特定的问题。因此,它 不能 将日期值转换为LINQ并引发错误。
我已经问过这个问题here,但没有得到答复。
因此我开始将方法更改为使用Queryable。
这就是我想使用Queryable的方法:

private void button1_Click(object sender, EventArgs e)
    {
        LinqTestDataContext ctx = new LinqTestDataContext("Data Source=.;Initial Catalog=valveManagement2018;Integrated Security=True");
        if (rbvalveStreet.Checked)
        {
            if (!string.IsNullOrEmpty(valveStreet.Text))
            {
                var qry1 = Queryable.Select(Queryable.Where(
                         ctx.valves, p => p.valveStreet.Contains(valveStreet.Text)), p => new { p.valveId, p.aTId,p.typeId, p.valveStreet });
            }
        }
        if (rbtypeId.Checked)
        {
                var qry2 = Queryable.Select(Queryable.Where(
            ctx.valves, p => p.typeId == cbTypeId.selectedIndex), p => new { p.valveId, p.aTId, p.typeId,p.valveStreet });
        }

        var qryFinal = qry1.Concat(qry2);

        dgv.DataSource = qryFinal;
    }

但是问题出在这里,Concat的行为类似于OR操作数,结果是  qry1 OR qry2,但我想得到类似AND的操作数,例如qry1 AND qry2
那么,如何处理此问题或存在任何安全方法来处理linq to sql中的自定义?

2 个答案:

答案 0 :(得分:1)

这不是自定义,而是普通的Linq To SQL:

class TestPage extends Component {
  constructor(props){
    super(props);
    this.state = {
      myNumber:0
    }   
  }

  componentDidMount(){
  }

  render(){
    console.log('My value : ',this.state.myNumber);
    return (
      <View>
        <Picker
          selectedValue={this.state.myNumber}
          style={{ height: 50, width: 150 }}
          onValueChange={(itemValue) => this.setState({myNumber: itemValue})}>
          <Picker.Item label="One" value="1" />//The value here 
          <Picker.Item label="Two" value="2" />
        </Picker>
      </View>
    );
  }
}

答案 1 :(得分:0)

这应该与Linq2Sql一起使用,并且更容易遵循:

LinqTestDataContext ctx = new LinqTestDataContext("Data Source=.;Initial Catalog=valveManagement2018;Integrated Security=True");

bool includeValveStreet = rbvalveStreet.Checked,
     includeTypeId = rbtypeId.Checked;

dgv.DataSource = ctx.valves.Where(p => (includeValveStreet && p.valveStreet.Contains(valveStreet.Text))
                                    || (includeTypeId && p.typeId == cbTypeId.selectedIndex)))
                            .Select(p => new { p.valveId, p.aTId,p.typeId, p.valveStreet })
                            .ToList();