【问题标题】:LINQ Query to Return multiple resultsLINQ 查询返回多个结果
【发布时间】:2010-09-25 21:27:30
【问题描述】:

我正在尝试编写一个文本框,它将搜索 5 个 DB 列并返回给定搜索的每个结果,例如。 “红”会返回:红球、红威廉姆斯等。人们尝试过的任何例子或类似的事情。我的搜索示例代码。

谢谢。

    ItemMasterDataContext db = new ItemMasterDataContext();

    string s = txtSearch.Text.Trim();
    var q = from p in db.ITMSTs
            where p.IMITD1.Contains(s) ||
             p.IMITD2.Contains(s) ||
             p.IMMFNO.Contains(s) ||
             p.IMITNO.Contains(s) ||
             p.IMVNNO.Contains(s)
            select p;

    lv.DataSource = q;
    lv.DataBind();

【问题讨论】:

  • 那么到底是什么问题呢?你的代码有什么问题?你还没有真正说出你的问题是什么。 ;)
  • 到第二个jalf:你有什么问题?

标签: c# asp.net linq sql-server-2000


【解决方案1】:

"q" 在您的示例中将是 IQueryable<ITMST>。我不认为 WebControl 的 Datasource 属性知道如何处理它。尝试将该行写为:

 lv.DataSource = q.ToList();

【讨论】:

  • 除非我弄错了,否则网络绑定对 IEnumerable 很满意,其中包括 IQueryable - 所以它应该很高兴。不过,Winform 绑定需要 ToList()。
【解决方案2】:

你所拥有的通常是人们使用 linq 会做的事情。如果您想变得更复杂并使用数据库通配符,请查看 System.Data.Linq 中的 SqlMethods 类。

@詹姆斯柯伦 您可以分配 DataSource 属性 q ,它会正常工作。唯一不同的是查询的执行时间。

【讨论】:

    【解决方案3】:

    你可以做这样的事情(语法可能是关闭的)

    using(var db = new ItemMasterDataContext())
    {
        var s = txtSearch.Text.Trim();
        var result = from p in db.ITMSTs select p;
    
        if( result.Any(p=>p.IMITD1.Contains(s))
             lv.DataSource = result.Where(p=>p.IMITD1.Contains(s))
        else if ( result.Any(p=>p.IMITD2.Contains(s))
            lv.DataSource = result.Where(p=>p.IMITD1.Contains(s))
    
        lv.DataBind();
    }
    

    或者您可能想要使用来自 MSDN 的 LinkLink

    编码愉快!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 2013-01-26
      • 2023-04-09
      • 2020-10-23
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多