PDA

View Full Version : حرفه ای: جنریک کردن این متد چطوریه؟



سیدسبحان
شنبه 28 شهریور 1394, 11:13 صبح
سلام
میخاستم بدونم زیر مجموعه های یک شی رو چطوری به صورت جنریک بنویسم
مثلا متد زیر:

public void add<T>(T parametr)
{
var q= from a in db.person
where a.field == parametr
select a;
.....
}


من چطوری به این فیلد رو جنریک کنم که مجبور نباشم به خاطر همین یه بدونه کلمه، ده بار متد رو کپی و پیست کنم؟

ممنون از همه

SabaSabouhi
شنبه 28 شهریور 1394, 12:03 عصر
سلام
به این شکل که شما می‌خوای شاید نشه. به نظر من جنریک برای این مدل کارها نیست.
ضمن این که اگه شما بجای استفاده از LinQ به صورت عادی از LinQ Extension Methods استفاده کنی خیلی دستت باز می‌شه تو نوشتن
توابع پویا و پارامتری. به‌ویژه اگه با یه Code Generator بخشی از Bll رو تولید کنی.
مثلاً اگه بجای کدی که نوشتی بنویسی:

var list = dataContext.Person.Where( x=> x.field == parameter )
.ToList();

دستت باز می‌شه و می‌تونی اون شرط رو به صورت پارامتر استفاده کنی:

public List<MyEntity> ListBy( Expression<Func<MyEntitiy, bool>> condition ) {
using ( var entities = new DbContext() ){
var list = entities.MyEntity
.Where ( condition )
.ToList();
return list;
}
}




حالا تو پارامتر این تابع هر چی بخوای می‌تونی بفرستی

var list1 = ListBy( x=> x.Id == id );
var list2 = ListBy( x=> x.Name == name );
var list3 = ListBy( x=> x.ParentId == null );

به نظر من جنریک برای این کار مناسب نیست.


صبا صبوحی

سیدسبحان
شنبه 28 شهریور 1394, 17:01 عصر
ببخشید من متوجه نشدم.
خب چطوری این تابع شمارو فراخونی کنم؟
یعنی اینطوری؟:
var list1 = ListBy( x=> x.Id == id ); ListBy(list1);
اینطوری؟

یه سوال دیگه اینکه Bll چی هست؟