دسته بندی ها
15:26 1400/10/27

ساخت یک متد به صورت جنریک جهت نمایش همه فیلدهای کویری

مشخصات سوال کننده :
کاربر : Tarak4135     امتیاز کاربر : 56     رتبه کاربر : 17
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3965
1 نظر
pedram_khan : شما خودتون پاسخ سوال خودتون رو دادید. میخواید چند تا کوئری با هم جوین کنید و در قالب یک متد که ورودی TModel یا جنریک داره استفاده کنید و همین کار رو هم در مثالی که زدید انجام دادید. دقیقا سوال کجاست ؟

امتیاز کاربر : 277   رتبه کاربر : 6   تاریخ ثبت : 02:36 1400/10/29
هوش مصنوعی

پاسخ هوش مصنوعی

برای ایجاد یک متد جنریک که بتواند داده ها را از چند جدول با استفاده از جوین ها برگرداند، می توانید از IQueryable و Projection در LINQ استفاده کنید. در زیر مثالی از یک تابع جنریک برای این منظور آورده شده است:

public virtual IEnumerable<TResult> GetWithJoins<TResult>(
    Expression<Func<Tentity, bool>> whereVariable = null,
    Func<IQueryable<Tentity>, IOrderedQueryable<Tentity>> orderbyVariable = null,
    Func<IQueryable<Tentity>, IQueryable<TResult>> selectVariable = null,
    string joinString = "")
{
    IQueryable<Tentity> query = _table;
    if (whereVariable != null)
    {
        query = query.Where(whereVariable);
    }
    if (joinString != "")
    {
        foreach (string joins in joinString.Split(','))
        {
            query = query.Include(joins);
        }
    }
    if (orderbyVariable != null)
    {
        query = orderbyVariable(query);
    }

    return selectVariable != null ? selectVariable(query).ToList() : null;
}

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

var list = GetWithJoins(
    whereVariable: null,
    orderbyVariable: q => q.OrderBy(x => x.ID),
    selectVariable: q => from a in q
                      join b in db.MyBook on a.IDBook equals b.IDBook
                      join c in db.MyStudent on a.IDStudent equals c.IDStudent
                      select new { a.ID, a.gride, b.IDBook, b.NameBook, c.IDStudent, c.NameStudent }
);
radGridView1.DataSource = list;

با استفاده از این روش، می توانید هر تعداد جوین و انتخاب کنید و تمام فیلدها را بازگردانید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود