【问题标题】:IQueryable contains any of string arrayIQueryable 包含任何字符串数组
【发布时间】:2011-01-08 18:07:02
【问题描述】:

当我尝试在数据库中搜索包含数组中字符串的数据时,我不确定为什么 IQuerable 会限制我。

objectFactory.Resolve<IUserDao>().Query.
                Where(t => 
                    (spltedInput.Any(val=> t.LastName.Contains(val)) || spltedInput.Any(val=> t.Name.Contains(val))) 
                    && t.MasterCompany.Id == MasterCompanySeted).
                Select(t => new { Name = t.Name + " " + t.LastName, Id = t.Id }).
                AsEnumerable().
                Select(t => new RadComboBoxItemData() { Text = t.Name, Value = t.Id.ToString() })
                .ToArray();

它抛出 NullReferenceException ,我不确定如何检查数组中的任何元素是否包含在 LastName 或 Name 中,以及导致此异常的原因。

我只是猜测这是因为您不能在查询中进行查询?

【问题讨论】:

    标签: linq nhibernate ado.net linq-to-entities iqueryable


    【解决方案1】:

    我怀疑您的objectFactoryIUserDao 可能为空,这就是您得到NullReferenceException 的原因。你调试过吗,因为调试器会告诉你什么对象是空的。

    【讨论】:

    • 不,它就像一个魅力我只给出了这个代码,所以你可以看到上下文,当我将它更改为例如:t.LastName.Contains(spltedInput[0]) 它工作得很好。
    【解决方案2】:

    您可以在查询中进行查询。

    这是我通过 Google 找到的嵌套 Linq 查询的随机示例,您的里程可能会有所不同:

    var query = people
        .Where(p => p.ID == 1)
        .SelectMany(p => roles
            .Where(r => r.ID == p.ID)
            .Select(r => new { p.FirstName, p.LastName, r.Role }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 2013-05-19
      • 2015-09-08
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      相关资源
      最近更新 更多