代码之家  ›  专栏  ›  技术社区  ›  kamiar3001

在linq语句中添加自定义函数

  •  1
  • kamiar3001  · 技术社区  · 14 年前

    大家好
    我想在关键字字段中搜索,就像在集合中搜索关键字一样。
    e、 我的关键字是“Wing”关键字是“Wing Dress Others”带有空格我应该写什么来代替它?

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString.HasKeys())
        {
            DbDataContext db = new DbDataContext();
            var Query = from n in db.Products
                        where Compare(n.Keywords, Request.QueryString["key"])
                        select n;
            DataList1.DataSource = Query;
            DataList1.DataBind();
        }
    }
    
    bool Compare(string keywords,string key)
    {
        string[] items = keywords.Split(' ');
        foreach (string item in items)
            if (item.Equals(key)) return true;
        return false;
    }
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Stefanvds    14 年前

    在这种情况下,不是你自己做的 Compare 你可以用 Contains ,检查字符串是否在字符串中。这对LINQ有用

        var Query = from n in db.Products
                    where n.Keywords.Contains(Request.QueryString["key"])
                    select n;
    

    包含也适用于数组。

        2
  •  5
  •   Community CDub    7 年前

    Custom Method in LINQ to SQL query

    查看全文: What is and what isn't possible with linq

    以下是不可能的

    // function used in filter
    static bool MyFunc(Nwind.Product p)
    {
      return p.ProductName.StartsWith("B");
    }
    // query that uses MyFunc
    var q = 
      from p in db.Products
      where MyPriceFunc(p.UnitPrice) > 30m
      select p
    

    当您尝试从q获取结果(例如使用foreach语句)时,实际上会引发异常,因为linqtosql只在需要结果并且必须执行查询时才尝试将表达式树转换为T-SQL。

    要修复这个示例,只需将检查product name是否以“B”开头的代码复制到查询的where子句,就可以了。