Sorgu Yardım(Lambda)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek

    Şu regex işini görür:

    \s*(car)[^a-zA-Z\d:]

     

    \s* : Başta boşluk olabilir veya olmayabilir.

    (car) : "car" sözcüğünü yakalar.

    [^a-zA-Z\d:]  : Alfanumerik karakterleri kabul etmez.

    Yani başında boşluğa izin verecek şekilde sadece car sözcüğü olanları yakalıyor.

    Kodda şöyle:

    var myRegex=new Regex(@"\s*(car)[^a-zA-Z\d:]");
    var model = db.Kelimes.Where(myRegex.IsMatch).ToList();

    bkz. http://stackoverflow.com/a/7013655/2946122

    Dipnot: Tablo isimlendirmelerinde yarı İngilizce yarı Türkçe isimlendirmeden kaçınmalısın hocam bence, ilerde sinir bozuyor :)


    İnsan; insan olsaydı,insan olmazdı..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    Şunu deneyin: 

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Text.RegularExpressions;

    using System.Threading.Tasks;

     

    namespace ConsoleApplication2

    {

        class Program

        {

            static List<string> saman_ = new List<string>()

                                                            {

                                                                "by car", "cardanadam", "carlik",

                                                                "x car.", "y car z", "car ", "car,"

                                                            };

            public static bool BenimFiltre(string str)

            {

                Regex r = new Regex(@"\bcar\b");

                return (r.Match(str).Success);           

            }

        

            static void Main(string[] args)

            {

     

                Func<string,bool> filtrefunc = new Func<string, bool>(BenimFiltre);

                var sonuc = saman_.Where(e => filtrefunc(e));

     

                foreach (var item in sonuc)

                {

                    Console.WriteLine(item);

                }

                Console.ReadKey();

            }

     

            

        }

    }

     


    Olaylara karışmayın!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    hocalar Equals işe yaramıyor. Regex ile çözülecek sanırım. denemelerim devam ediyor :)

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    Aşağıdaki gibi deneyebilirsin.

    string txt = "car";
    var pattern = string.Format(@"\b{0}\b", Regex.Escape(txt));
    var re = new Regex(pattern, RegexOptions.IgnoreCase);
    var model = db.Kelimes.Where(x => re.IsMatch(x.KelimeAdi)).ToList();

    Bu yöntem ile txt değişkenindeki metni \b çapalarıyla sarıp regex testine sokuyorsun.
    Aranan kelime ahmet ise şunlarla eşleşir: "ahmet'ten", "(ahmet)", "[ahmet]", "ahmet!", "ahmet."
    Şunlarla ise eşleşmez: "zahmet", "ahmetcan", "ahmete", "ahmetten"

    Eğer bunu istemiyor, ahmet'in satır baş veya sonlarında veya ortalarda bir yerde ancak boşluk (veya tab vs..) ile çevrili olduğu hallerde eşleşmesini istiyorsan, pattern ve re'yi aşağıdaki gibi değiştir.

    var pattern = string.Format(@"(?<=\s|^){0}(?=\s|$)", Regex.Escape(txt));
    var re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);

    Son olarak, eğer büyük-küçük harfe duyarlı bir arama yapmak istiyorsan RegexOptions.IgnoreCase'i kaldırmalısın.

     

     

    buzukatak tarafından 18/Tem/16 21:26 tarihinde düzenlenmiştir

    anlıyorum.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek
    cemnet bunu yazdı

    hocalar Equals işe yaramıyor. Regex ile çözülecek sanırım. denemelerim devam ediyor :)

    E @Lightsaber verdi, ben verdim... Olmadı mı? 


    Olaylara karışmayın!
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    hocalar durum biraz uzadı farkındayım ama aldığım sonuç şu

     

    kod böyle olunca alttaki hatayı alıyorum.

    var re2 = new Regex(@"\s*(lives)[^a-zA-Z\d:]");
    var model2 = db.Kelimes.Where(x=> re2.IsMatch(x.KelimeAdi)).ToList();

     

    LINQ to Entities does not recognize the method 'Boolean IsMatch(System.String)' method, and this method cannot be translated into a store expression.

    ----------

     

    Şu şekilde çalıştırdığımda hata almıyorum.

    var pattern = string.Format(@"(?<=\s|^){0}(?=\s|$)", Regex.Escape("lives"));
    var re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
    var model = db.Kelimes.AsEnumerable().Where(x => re.IsMatch(x.KelimeAdi)).ToList();

     

    ama bu defa da sql profiler dan baktığım zaman tüm tabloyu çekiyor daha sonra kod tarafında arama yapıyor. Tabloda var 3m kayıt. Direk sql tarafında regexli arama yapması lazım. 

     

     

     

     

    cemnet tarafından 22/Tem/16 17:29 tarihinde düzenlenmiştir
Toplam Hit: 1648 Toplam Mesaj: 17
sorgu lamba