Linq to SQL的不同结果集取决于条件

时间:2016-10-07 18:26:25

标签: c# linq linq-to-sql

在我的存储过程中proc1

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 个答案:

答案 0 :(得分:0)

您需要返回包含两个表中列的结果。 这样的事情(但是如果它们具有相同的&#34;名称&#34;对于某些列,您将必须列出所有列以避免重复/创建别名):

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;

答案 1 :(得分: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

            }
        );
    }