Ma question semble assez simple mais est devenue fastidieuse pour moi. Dans mon projet, j'ai un fichier DBML qui sert de couche d'accès aux données. Il existe une autre méthode d'utilité qui convertit le résultat existant en un ensemble de données. Ci-dessous ma méthode:Convertir plusieurs tables en ensemble de données
#region To convert from LINQ to dataset
/// <summary>
/// Function convert linq to Dataset
/// </summary>
public static DataSet LINQToDataTable<T>(IEnumerable<T> varlist)
{
DataSet ds = new DataSet();
//Creating an object of datatable
DataTable dtReturn = new DataTable();
dtReturn.Rows.Clear();
// column names
PropertyInfo[] oProps = null;
if (varlist == null) return ds;
foreach (T rec in varlist)
{
// Use reflection to get property names, to create table, Only first time, others will follow
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps)
{
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
(rec, null);
}
dtReturn.Rows.Add(dr);
}
ds.Tables.Add(dtReturn);
return ds;
}
#endregion
maintenant un de mes procédure stockée a trois requêtes Select en cours d'exécution revenant ainsi trois tables à partir de là. Quand je retourne le résultat sur le code derrière et regarde rapidement le résultat, c'est en me donnant la seule table sur les trois.
Quelle sera la solution possible. Sil te plait aide moi. Je pense qu'il pourrait y avoir un problème avec le LOC ci-dessus.
Mise à jour de requête Sql
ALTER PROCEDURE [dbo].[usp_GetTenantPropertyDetailsForAgreement]
@TenantId INT,
@PropertyDetailsId INT,
@BillingPlanId INT
)
AS
BEGIN
-- Select Tenant's Name and his/her household member info from the two tables
SELECT (tbl_MSTTenantPersonalInfo.FirstName + ' ' + ISNULL(tbl_MSTTenantPersonalInfo.MiddleInitial,'') + ' ' + tbl_MSTTenantPersonalInfo.LastName) AS Tenant,
(ISNULL(tbl_TenantFamilyMemberInfo.FirstName,'') + ' ' + ISNULL(tbl_TenantFamilyMemberInfo.MiddleName,'') + ' ' + ISNULL(tbl_TenantFamilyMemberInfo.LastName,'')) AS FMName
FROM tbl_MSTTenantPersonalInfo LEFT JOIN
tbl_TenantFamilyMemberInfo
ON tbl_MSTTenantPersonalInfo.TenantPersonalInfoID = tbl_TenantFamilyMemberInfo.TenantPersonalInfoID
WHERE tbl_MSTTenantPersonalInfo.TenantPersonalInfoID = @TenantId AND (tbl_MSTTenantPersonalInfo.IsDelete = 0)
SELECT tbl_PropertyConstructionInfo.BedRoomsNo,
(ISNULL(tbl_MSTPropertyDetails.Area,'')+''+ ISNULL(tbl_MSTPropertyDetails.Project,'')+' '+ ISNULL(tbl_MSTPropertyDetails.Unit,'')) AS Project,
(tbl_MSTPropertyDetails.Address+' <br/>'+ ISNULL(tbl_MSTPropertyDetails.Address2,'')+' <br/>'+tbl_MSTPropertyDetails.City+' '+tbl_MSTPropertyDetails.State
+' '+ tbl_MSTPropertyDetails.Zip) AS PropertyAdress
FROM tbl_MSTPropertyDetails INNER JOIN
tbl_PropertyConstructionInfo ON tbl_MSTPropertyDetails.PropertyDetailsID = tbl_PropertyConstructionInfo.PropertyDetailsID
WHERE tbl_MSTPropertyDetails.PropertyDetailsID = @PropertyDetailsId AND tbl_MSTPropertyDetails.IsDelete = 0
SELECT BiilingDayOfMonth, LateFeeAmount, LateFeeAppliedDayofMonth
FROM tbl_MSTBillingPlan
WHERE BillingplanID = @BillingPlanId
END
méthode appel de procédure stockée
/// <summary>
///
/// </summary>
/// <returns></returns>
public DataSet GetTenantPropertyDetailsForAgreement(int tenantId, int propertyId,int billingPlanId)
{
DataSet ds = new DataSet();
try
{
using (objDataManagerDataContext = new DataManagerDataContext())
{
ds = Utility.LINQToDataTable(objDataManagerDataContext.usp_GetTenantPropertyDetailsForAgreement(tenantId,propertyId,billingPlanId));
}
}
catch (Exception ex)
{
SaveLogger.WriteError(ex.ToString());
}
return ds;
}
méthode DBML FICHIER
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.usp_GetTenantPropertyDetailsForAgreement")]
public IEnumerable<usp_GetTenantPropertyDetailsForAgreementResult> usp_GetTenantPropertyDetailsForAgreement([global::System.Data.Linq.Mapping.ParameterAttribute(Name = "TenantId", DbType = "Int")] System.Nullable<int> tenantId, [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "PropertyDetailsId", DbType = "Int")] System.Nullable<int> propertyDetailsId, [global::System.Data.Linq.Mapping.ParameterAttribute(Name = "BillingPlanId", DbType = "Int")] System.Nullable<int> billingPlanId)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), tenantId, propertyDetailsId, billingPlanId);
return ((IEnumerable<usp_GetTenantPropertyDetailsForAgreementResult>)(result.ReturnValue));
}
où est votre procédure stockée; s'il vous plaît poster votre code où vous avez écrit le code pour appeler SP –