[英]Default value for dapper multi mapped IEnumerable list when result is null
我有以下代碼通過存儲過程查詢數據庫。 當ReturnObject.familymembers = multi.Read<InternalObjects.Person>().AsQueryable();
不為空,返回值可以; 但是我找不到一種通過Dapper / linq使用集合類型處理null返回的方法。
我的存儲過程:
SELECT states.name as stateName, fam.*
FROM Family fam
WHERE fam.idUserName=@username
SELECT person.*
FROM person
INNER JOIN Family fam on fam.Id = person.idFamily
WHERE fam.idUserName=@username
當第二條SQL語句具有記錄時,設置ReturnObject.familymembers
不會出現任何問題,但是我在弄清楚如何指定默認值或處理Dapper的空返回值時遇到了麻煩。 調試時,如果未返回任何行,則ReturnObject.familymembers = multi.Read<InternalObjects.Person>().AsQueryable()
會引發null異常。
這是我認為可行的方法,但無效:
ReturnObject.familymembers = multi.Read<InternalObjects.Person>().AsQueryable().DefaultIfEmpty<InternalObjects.Person>();
public InternalObjects.FamilyDashboard GetDashboardInfo(string username)
{
InternalObjects.FamilyDashboard ReturnObject = new InternalObjects.FamilyDashboard();
using (var dbConnection = _dbConnectionFactory.CreateConnection())
{
using (var multi = dbConnection.QueryMultiple("DashboardSP", new { username = username }, commandType: CommandType.StoredProcedure))
{
ReturnObject = multi.Read<InternalObjects.FamilyDashboard>().SingleOrDefault();
ReturnObject.familymembers = multi.Read<InternalObjects.Person>().AsQueryable();
}
}
return ReturnObject;
}
我的DTO:
public class InternalObjects
{
public class FamilyDashboard
{
public string physicalAddress1 { get; set; }
public string MailingAddress1 { get; set; }
public string physicalAddressCity { get; set; }
public string physicalAddressZip { get; set; }
public string MailingAddressCity { get; set; }
public string NumInHousehold { get; set; }
public string capidCounty { get; set; }
public string physicalUnit { get; set; }
public string mailingUnit { get; set; }
public string familyPhone { get; set; }
public string capCharacteristics { get; set; }
public IEnumerable<Person> familymembers {get; set;}
}
public class Person
{
public int Id { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string middleName { get; set; }
public int gender { get; set; }
public DateTime birthdate { get; set; }
public string emailPersonal { get; set; }
public string SSN { get; set; }
public string relationshipName { get; set; }
public string primaryLanguageName { get; set; }
public int age { get; set; }
}
}
我找到了答案:
基本上,如果沒有行返回,dapper不會返回任何值,這不會實例化我的對象。 我的父對象ReturnObject
尚未實例化,但仍可以正常執行。
下一行ReturnObject.familymembers = multi.Read<InternalObjects.Person>().AsQueryable()
嘗試訪問該對象,但DTO不存在。
一個簡單的條件可以節省一天:
if (ReturnObject != null)
{
ReturnObject.familymembers = multi.Read<InternalObjects.Person>().ToList<InternalObjects.Person>();
}
任何遇到相同問題的人的參考!:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.