سؤال

يستخدم موقعي Subsonic 2.2 على موقعي.

لديّ حالة غريبة واحدة حيث أحتاج إلى تشغيل بعض عبارات SQL المخصصة.

public IList<string> GetDistincList(string TableName, string FieldName)
{
    string sqlToRun = string.Format("SELECT DISTINCT {0} FROM {1} ORDER BY {0}", FieldName, TableName);

    Query query = new Query(TableName);
    query.PleaseRunThis(sqlToRun);
    query.ExecuteReader();

}

يمكن لأي شخص أن يساعدني هنا؟ كما يظهر ، أريد فقط إرجاع قائمة عامة من السلاسل.

شكرًا!

هل كانت مفيدة؟

المحلول

لدى Subong طريقة رائعة تسمى executeTypedList () حتى تتمكن من فعل Somethink مثل هذا.

List<int> result = DB.Select(Table.Columns.Id)
  .Distinct()
  .From<Table>()
  .OrderBy(Table.Columns.Id)
  .ExecuteTypedList<int>();

أو حتى مع pocos:

public class UserResult
{
    public int Id {get;set;}
    public string Name {get;set;}
}


List<UserResult> users = DB.Select(
       User.Columns.UserId + " as Id",     // the as ... is only needed if your
       User.Columns.UserName + " as Name"  // column name differs from the
   ).From<User>()                          // property name of your class
    .ExecuteTypedList<UserResult>();

لسوء الحظ ، لا تعمل هذه الطريقة مع السلسلة لأنها تتطلب أ)

ومع ذلك ، كتبت طريقة تمديد منذ فترة تعمل للسلسلة:

استخدم طريقة subsic.select () executePedList مع سلسلة

انظر إلى إجابتي الخاصة في الرابط.

إذا قمت بإضافة ExtensionMethod إلى الكود الخاص بك ، يمكنك القيام به:

 List<String> result = DB.Select(User.Columns.UserName)
                         .From<User>()
                         .ExecuteTypedList();       

نصائح أخرى

استخدم فئة CodingHorror.

إليك طريقة Subsond 3 للقيام بذلك: http://www.subsonicproject.com/docs/codinghorror

الطريق دون الصوت 2 متشابهة:

Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top