0

私はかなり新しい C# プログラマであり、FQL の結果をカスタム クラスに変換しようとして行き詰まっています...たとえば、次のことを行っていますが、多くの手順のように思えます...データテーブルを返すだけでした、ただし、結果を強く型付けされたクラス コレクションにしたかった。洞察をいただければ幸いです。私は、同様の結果を達成する他の方法にもオープンです。

ありがとう、チャド

public class FacebookFriends
{
    public string FriendID { get; set; }
    public string FriendName { get; set; }
    public string PicURLSquare { get; set; }
    public string ProfileLink { get; set; }

    //Gets your FB friends that are NOT currently using this application so you can invite them
    public IEnumerable<FacebookFriends> GetFriendsNotUsingApp()
    {
        string strQuery = "SELECT uid, name, pic_square, link FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND NOT is_app_user";

        FacebookSDKInterface objFQL = new FacebookSDKInterface();
        dynamic objFNU = objFQL.FBFQL(strQuery);

        //Construct the new, formated, merged datatable to store the results the way we want them   
        DataTable dtFriendsNotUsingApp = new DataTable();    
        dtFriendsNotUsingApp.Columns.Add("FriendID");
        dtFriendsNotUsingApp.Columns.Add("FriendName");
        dtFriendsNotUsingApp.Columns.Add("PicURLSquare");
        dtFriendsNotUsingApp.Columns.Add("Link");

        if (objFQL != null)
        {
            foreach (dynamic row in objFNU.data)
            {
                //Add New DataRow to new DataTable
                DataRow drRow = dtFriendsNotUsingApp.NewRow();

                //Get various values from original JSON Friend List returned
                drRow["FriendID"] = row.uid;
                drRow["FriendName"] = row.name;
                drRow["PicURLSquare"] = row.pic_square;
                drRow["Link"] = row.link;

                //Add New Row to New Resulting Data Table
                dtFriendsNotUsingApp.Rows.Add(drRow);
            }

            dtFriendsNotUsingApp.DefaultView.Sort = "FriendName";
        }

        IEnumerable<FacebookFriends> objFriendsListCollection = null;

        var toLinq = from list in dtFriendsNotUsingApp.AsEnumerable()
                     select new FacebookFriends
                     {
                         FriendID = list["FriendID"].ToString(),
                         FriendName = list["FriendName"].ToString(),
                         PicURLSquare = list["PicURLSquare"].ToString(),
                         ProfileLink = list["ProfileLink"].ToString()
                     };

        objFriendsListCollection = toLinq.OrderByDescending(p => p.FriendName);

        return objFriendsListCollection;

    } //Get FB Friends not already using this app
4

3 に答える 3

1

私も Facebook API や FQL の経験はありませんが、コードを見るとobjFNU.dataを実装しているように見えるためIEnumerable、LINQ 拡張メソッドを直接使用できます。

public class FacebookFriends
{
    public string FriendID { get; set; }
    public string FriendName { get; set; }
    public string PicURLSquare { get; set; }
    public string ProfileLink { get; set; }

    //Gets your FB friends that are NOT currently using this application so you can invite them
    public static IEnumerable<FacebookFriends> GetFriendsNotUsingApp()
    {
        string strQuery = "SELECT uid, name, pic_square, link FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND NOT is_app_user";

        FacebookSDKInterface objFQL = new FacebookSDKInterface();
        dynamic objFNU = objFQL.FBFQL(strQuery);

        if (objFQL != null) // shouldn't you check objFNU for being null here instead?
        {
            IEnumerable<dynamic> objFNUdata = (IEnumerable<dynamic>)objFNU.data; // explicit cast might not be necessary
            return objFNUdata.Select(row => new FacebookFriends()
                {
                    FriendID = row.uid,
                    FriendName = row.name,
                    PicURLSquare = row.pic_square,
                    ProfileLink = row.link
                }).OrderByDescending(p => p.FriendName);
        }
        else
        {
            return new List<FacebookFriends>();
        }
    } //Get FB Friends not already using this app
}
于 2012-07-24T05:03:56.550 に答える
1

これが役立つと思います。

1st : Facebook API を使用したことがないため、コードを例として使用しています。

2番目:メソッドがクラス内にあるため、に変更しましたstaticFacebookFriends.GetFriendsNotUsingApp()このように、 の代わりに , を呼び出すだけで使用できますnew FacebookFriends().GetFriendsNotUsingApp()

3番目のコード:

    public class FacebookFriends
    {
        public string FriendID { get; set; }
        public string FriendName { get; set; }
        public string PicURLSquare { get; set; }
        public string ProfileLink { get; set; }

        //Gets your FB friends that are NOT currently using this application so you can invite them
        public static IEnumerable<FacebookFriends> GetFriendsNotUsingApp()
        {
            string strQuery = "SELECT uid, name, pic_square, link FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND NOT is_app_user";

            FacebookSDKInterface objFQL = new FacebookSDKInterface();
            dynamic objFNU = objFQL.FBFQL(strQuery);

            List<FacebookFriends> friendsToReturn = new List<FacebookFriends>();

            if (objFQL != null)
            {
                foreach (dynamic row in objFNU.data)
                {
                    friendsToReturn.Add(new FacebookFriends()
                        {
                            FriendID = row.uid,
                            FriendName = row.name,
                            PicURLSquare = row.pic_square,
                            ProfileLink = row.link
                        }
                    );
                }
            }

            return friendsToReturn;
        } //Get FB Friends not already using this app
    }

お役に立てれば。

よろしく

于 2012-07-24T04:46:23.473 に答える
0

結局、これが一番うまくいきました。両方、特に @DarmirAh に感謝します。

try
        {
            FacebookSDKInterface objFQL = new FacebookSDKInterface();
            dynamic objFNU = objFQL.FBFQL(strQuery);

            if (objFNU != null) // shouldn't you check objFNU for being null here instead?
            {
               IEnumerable<dynamic> objFNUdata = (IEnumerable<dynamic>)objFNU.data; // explicit cast might not be necessary
               IEnumerable<FacebookFriends> objMyFriends =
               from row in objFNUdata
               select new FacebookFriends()
               {
                   FriendID = row.uid,
                   FriendName = row.name,
                   PicURLSquare = row.pic_square,
                   ProfileLink = row.profile_url
               };

               objMyFriends = objMyFriends.OrderBy(p => p.FriendName);
               return objMyFriends;
            }
            else
            {
                return new List<FacebookFriends>();
            }
        }
        catch (Exception ex)
        {
            return new List<FacebookFriends>();
        }
于 2012-07-27T18:07:04.153 に答える