2016-10-07 47 views
1

在我的存儲過程proc1LINQ to SQL的不同的結果集取決於條件

IF (condition1) 
    BEGIN 
     SELECT * FROM table1 
    END; 
ELSE IF (condition2) 
    BEGIN 
     SELECT * FROM table2 
    END; 

但在designer.cs,我只看到一個proc1Result類只有14類似於在table1 14列的屬性。表2的23列不能作爲屬性或字段找到。因此,當condition2滿足,

ISingleResult<proc1Result> results = datacontext1.proc1(parameter); 
foreach (proc1Result item in results){ 
    resultList.Add(
     new model2{ 
      // no property to set here 
     } 
    ); 
} 

我能做些什麼來Table2的列添加到proc1Result類?

+2

我建議重新考慮一個存儲過程可以返回完全不同結果集的設計。也許這個邏輯可以移出數據庫?否則,你必須返回兩者的數據組合。 – juharr

回答

0

您需要返回包含兩個表中的列的結果。 像這樣的東西(但如果它們具有相同的「名」某些列,你將不得不列出所有列,以避免重複/創建別名):

IF (condition1) 
    BEGIN 
     SELECT t1.*,t2.* 
     FROM table1 t1, table2 t2 
     -- return no results from t2, fieldname can never be null 
     WHERE t2.fieldname != t2.fieldname 
    END; 
ELSE IF (condition2) 
    BEGIN 
     SELECT t1.*,t2.* 
     FROM table1 t1, table2 t2 
     -- return no results from t1, fieldname can never be null. 
     WHERE t1.fieldname != t1.fieldname 
    END; 
+0

在我的原始設計中,在某些情況下,'SELECT'語句沒有'WHERE'子句。我如何添加像'WHERE table_name是「table1」'? –

+0

@DylanChensky - 你不能。 – Hogan

+0

@DylanChensky - 我希望你沒有嘗試過我的答案中的代碼,並不理解它。請嘗試一下,理解它,然後明白爲什麼你的問題沒有意義。 – Hogan

0

proc1Result將舉行從兩個模型中的屬性,所以當第一個條件執行第二個屬性時會被忽略,反之亦然。

Class proc1Result { 

    //properties for table1 

    //properties for table2 

    } 

Class model1{ 

    //properties for table1 

    } 

Class model2 { 

    //properties for table2 

    } 


    ISingleResult<proc1Result> results = datacontext1.proc1(parameter); 
    foreach (proc1Result item in results){ 
     resultList.Add(
      new model2{ 
       item.propertyname //which is there in both model2 and proc1result 

      } 
     ); 
    }