2017-02-01 4 views
3

私はiTunes/amazon/googlePlayアフィリエイトプログラムで働いており、Webサービス内の外部リンクテーブルにあるURLにAffiliateCodeを追加します。これは、Webサービスが最初に外部リンク[テーブル]から利用可能な異なるリンクをid_cdで収集し、利用可能なアフィリエイトプログラムがあるかどうかを比較するためにAffiliateProgram [テーブル]をループする必要があることを意味します。MVC C#Webサービスは2つのテーブルを結合し、出力を結合します

ExternalLink[Table] 
public int id_external_link { get; set; } 
public int id_cd { get; set; } 
public string Name { get; set; } 
public string URL { get; set; } 

AffiliateProgram[Table] 
public int ID { get; set; } 
public string AffiliateName { get; set; } 
public string AffiliateSite { get; set; } 
public string AffiliateCode { get; set; } 
public Nullable<int> CodePosition { get; set; } 

AffiliateProgram [テーブル] AffiliateNameとExternalLinks [テーブル]の名前は常に同じです。

これは私がそれを設定していたものですが、私はそれがまだ動作するようにはなっておらず、最後の日にはまだ立ち往生していません。

[Route("api/Cds/ExternalLinks/{id_cd}")] 
    public async Task<List<ExternalLink>> GetAllExternalLinks(int id_cd) 
    { 
     List<ExternalLink> externallinks = await db.ExternalLink 
      .Where(EL => EL.id_cd == id_cd) 
      .ToListAsync(); 

     List<ExternalLink> ListAllExternalLinks = new List<ExternalLink>(); 
     for (int i = 0; i < 4; i++) 
     { 
      ExternalLink CDEL = new ExternalLink(); 

      if (CDEL.Name == "Itunes") { 

      var query = from EL in db.ExternalLink 
         join AP in db.AffiliateProgram on EL.Name equals AP.AffiliateName 
         select new 
         { 
         AffiliateName = AP.AffiliateName, 
         Name = EL.Name, 
         AffilateCode = AP.AffiliateCode, 
         URL = EL.URL 
         }; 

      URL = query.First().Name + "?mt=1&at=" + query.First().AffiliateCode + "&ct=" + id_cd; 

      } 

      ListAllExternalLinks.Add(CDEL); 

     } 
     ListAllExternalLinks.AddRange(externallinks); 
     return ListAllExternalLinks; 
    } 

これは4つの空の結果と、ポストマスターに次のようになり:

[ 
{}, 
{}, 
{}, 
{}, 
{ 
"id_external_link": 1459, 
"id_cd": 13376, 
"name": "Itunes", 
"url": "https://itunes.apple.com/...countingcrows" 
}, 
{ 
"id_external_link": 1460, 
"id_cd": 13376, 
"name": "Amazon", 
"url": "https://www.amazon.com/....countingcrows" 
}, 
{ 
"id_external_link": 1461, 
"id_cd": 13376, 
"name": "GooglePlay", 
"url": "https://play.google.com/...countingcrows" 
} 
] 

答えて

0

他のデータベーステーブルをどのように接続してデータを使って文字列を変更するかについての説明は、S.Davに感謝します。非常に便利なレッスン。そのカントー解決策を持っているのが大好きだ:-)この場合、iTunesに接続されているアフィリエイトコードとの完璧なウェブサービスで

[Route("api/CDS/ExternalLink/{id_cd}")] 
    public async Task<List<ExternalLink>> GetAllExternalLinks(int id_cd) 
    { 

     List<ExternalLink> ListAllExternalLinks = new List<ExternalLink>(); 

      foreach (var item in await db.ExternalLink 
       .Where(EL => EL.id_cd == id_cd) 
       .ToListAsync()) 
      { 

      ExternalLink CDEL = new ExternalLink(); 

      CDEL.id_cd = item.id_cd; 
      CDEL.Name = item.Name; 

      if (CDEL.Name == "Itunes") { 

       var query = from EL in db.ExternalLink 
         join AP in db.AffiliateProgram on EL.Name equals AP.AffiliateName 
         select new 
         { 
         AffiliateName = AP.AffiliateName, 
         Name = EL.Name, 
         AffilateCode = AP.AffiliateCode, 
         URL = EL.URL 
         }; 

       CDEL.URL = item.URL + query.First().Name + "?mt=1&at=" + query.First().AffilateCode + "&ct=" + id_cd;   
      } 
      ListAllExternalLinks.Add(/CDEL); 
     } 
     return ListAllExternalLinks; 
    } 

結果は、実際にアフィリエイトコード自体を見つけることができるが、これは今のところ動作します - )

[ 
{ 
"id_cd": 13376, 
"name": "Itunes", 
"url": "https://itunes.apple.com/...../countingcrows?mt=1&at=1010lmNu&ct=13376" 
}, 
{ 
"id_cd": 13376, 
"name": "Amazon" 
"url": "https://www.amazon.com...../countingcrows" 
}, 
{ 
"id_cd": 13376, 
"name": "GooglePlay" 
"url": "https://play.google.com/....countingcrows?id=AEIKS4IbfNk&hl=en" 
} 
] 
3

あなたのクエリがreturning an anonymous objectですし、クエリによって返されていない属性にアクセスしています。 次の属性を返しますし、それらにアクセスするためのクエリを変更することができます:

 var query = from EL in db.ExternalLink 
        join AP in db.AffiliateProgram on EL.Name equals AP.AffiliateName 
        select new 
        { 
         AffiliateName = AP.AffiliateName 
         Name = EL.Name 
         AffiliateCode = AP.AffiliateCode 
        }; 
1

あなたも、コンパイルから、このコードを妨げる構文エラーの数を持っているので、それは正確にどこを把握するために少し難しいです一般的に間違っている。少なくとも、コードをコンパイルしていることを確認してください。必要な結果が得られない場合は、お手数ですが、

これは、必要以上に難しくしているようです。 2つのテーブルを結合できるようにするには、それらの間に外部キーを作成する必要があります。特定のリンクは、特定のアフィリエイトプログラムに属している場合は、実際にその関係を作成します。

public class ExternalLink 
{ 
    ... 

    [ForeignKey("AffiliateProgram")] 
    public int AffiliateProgramId { get; set; } 
    public virtual AffiliateProgram AffiliateProgram { get; set; } 
} 

次に照会するとき、あなたは、単にアフィリエイトプログラムを含むことができ、毎日それを呼び出す:次に

var externalLinks = db.ExternalLinks 
    .Include(m => m.AffiliateProgram) 
    .Where(m => m.id_cd == id_cd) 
    .ToListAsync(); 

リンクを繰り返しているので、

var affiliateCode = link.AffiliateProgram.AffiliateCode; 

スーパーシンプルです。

+0

はい私もそれを得ましたが、データベースを変更できないため、外部キーを追加して実行可能なコードを追加します –

関連する問題