Merhaba arkadaşlar bu gün düşünürken aklıma geldi acaba böyle bir şey linq yapısında mevcut mu? bilen varsa söylerse sevinirim. Düşünce şu eski ado.net te sorgulamada gelen değere göre if,else yapılarında bir string ek='and field='+deger deyip sorgunun sonuna ekliyorduk. Ama bu yapı gördüğüm kadarıyla linq içinde mevcut değil. örneğin;

public void deneme(int p){

    var list=db.product.tolist();
    if(p==1)
    {
     list=db.product.where(a=>a.productId==p).tolist()
    }
    if(p>1 && p<9)
    {
     list=db.product.where(a=>a.categoriId==p).tolist()
    }
    else
    {
     list=db.product.where(a=>a.markaId==p).tolist()
    }

}

gibi yapılabiliyor. ama ben where içine gelen değere göre string field ismi yazmak istiyorum. İnş. yeterince açıklayıcı yazmışımdır. Herkese kolay gelsin.

soruldu: 25 Haz '13, 17:18

jacksparrow47's gravatar image

jacksparrow47
931142332
cevap kabul oranı: 27%

değiştirildi: 13 Tem '13, 01:09

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

teşekkür ederim arkadaşlar.Soruyu sorduktan sonra bende araştırmaya devam ettim tabi.sizin dediğiniz öntemler dışında birde list=db.product.where(x=>x.GetGetType().GetProperty("field").GetValue(x,null) as string) gibi bir ifade daha buldum.

(26 Haz '13, 01:33) jacksparrow47 jacksparrow47's gravatar image

reflection özelliklerinin yavaş olduğuna dair makaleler var

(26 Haz '13, 01:53) nurettin nurettin's gravatar image

Açıkçası o kadar makale okumadım elinizde linki mevcutsa atabilirmisiniz.

(26 Haz '13, 02:12) jacksparrow47 jacksparrow47's gravatar image

@jacksparrow47 makaleler var yazısının altına link koymuştum

(27 Haz '13, 00:32) nurettin nurettin's gravatar image

örnek kod için, birlikte kullanılmak istenen filtreleme komutlarından sonra "tolist()" cağrımı yapılmazsa performans artısı sağlanabilir zira "tolist()" ile veri belleğe alınır(veritabanı motoruna sorgu atılır, sonuc tutulur). Belleğe alma işlemi filtreleme koşullarından sonra yapılırsa daha sağlıklı olur.

(29 Haz '13, 08:35) gturedi gturedi's gravatar image

.NET lambda ifadeleri dışarıdan değer alabilir. Where koşulunuzun içinde ?: işlemini kullanarak dışarıdaki değişkene bağlı koşullu lambda üretebilirsiniz. Örnek:

using System;
using System.Linq;
using System.Collections.Generic;

public class Test
{
  public int ProductId{ get; set; }
  public int BrandId{ get; set; }
  public int CategoryId{ get; set; }
}

public class MainTest
{
  public static void Main(string[] args)
  {
    List<Test> tests;
    tests.Add(new Test{ ProductId= 1, BrandId= 2, CategoryId= 9 });
    int p= 1;
    tests.Where(x=> (
      p== 1 ? x.ProductId== 1 :
      p< 9 && p> 1 ? x.BrandId== p :
      x.CategoryId== p));
  }
}
permanent link

cevaplandı: 25 Haz '13, 23:04

nurettin's gravatar image

nurettin
2.2k2441
cevap kabul oranı: 14%

değiştirildi: 25 Haz '13, 23:08

Güvenli yazılım için string birleştirmeyi tavsiye etmeyeceğim.

(26 Haz '13, 00:47) nurettin nurettin's gravatar image
1

Linq-dynamic için parametre gönderimi şeklinde de yapılabiliyor. Güvenlik sıkıntısı olmaz.

(26 Haz '13, 01:30) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

@AliRıza evet string birleştirme (+=) değil parametreli yapılırsa çok daha iyi.

(26 Haz '13, 01:51) nurettin nurettin's gravatar image

Linq sorguları içerisinde SQL stringler çalıştırabilirsiniz. Zannedersem sizin kastettiğiniz dynamic-linq.

Örneğin;

list=db.product.where("productId = 1 and categoriId = 3").tolist()

gibi...

Yukarıdaki örneği kastediyorsanız, dynamic-linq kullanmalısınız. Tabi

using System.Linq.Dynamic;

kutuphanesini sayfada referans ederek...

permanent link

cevaplandı: 26 Haz '13, 00:28

AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AliRıza Adıyahşi ♦
7.9k146288
cevap kabul oranı: 44%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×6

Soruldu: 25 Haz '13, 17:18

Görüntüleme: 950 kez

Son güncelleme: 13 Tem '13, 01:09

powered by BitNami OSQA