我正在尝试从数据库中检索所选记录,但总是返回第一条记录
这是我的问题:
ClientSMSAccount smsAccount = rad.ClientSMSAccounts
.Where(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
.FirstOrDefault();
ClientSMSAccountModal.CountryID = 2,但是它从数据库返回第一条记录
不确定我在这里做错了什么?
修改
每条记录都由CompanyID和CountryID区分。 每个CounrtyID都有许多CompanyID。
因此,如果我按CompanyID和CountryID查询数据,则应仅返回确切记录。然而,它从数据库中返回第一条记录:(
数据库值:
CompanyID = 1 - CountryID = 1
CompanyID = 1 - CountryID = 2
答案 0 :(得分:1)
因为您选择第一个或默认值(此处为null)并分配给单个对象,如果您需要整个值意味着您必须使用如下:
List<ClientSMSAccount> smsAccounts = rad.ClientSMSAccounts
.Where(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
.ToList();
如果您要查找最后一个值,则表示您可以尝试使用LastOrDefault,如下所示:
ClientSMSAccount smsAccount = rad.ClientSMSAccounts
.LastOrDefault(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
答案 1 :(得分:0)
List<ClientSMSAccount> smsAccount = rad.ClientSMSAccounts
.Where(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
.ToList();
是你必须要做的。 Catch:List和.ToList()
答案 2 :(得分:0)
您的代码似乎没有任何问题。虽然它可以简化为:
clientSMSAccount smsAccount = rad.ClientSMSAccounts
.FirstOrDefault(x => x.CompanyID == companyId && x.CountryID == ClientSMSAccountModal.CountryID);
我认为问题在于companyId
或ClientSMSAccountModal.CountryID
不包含您认为的值。也许可以尝试对它们进行编码,然后开始查看你得到的内容。
答案 3 :(得分:0)
如果您想在第二个记录的另一个答案中给出评论,则需要在致电Skip(1)
之前使用FirstOrDefault()
(假设您可以保证至少有1记录)
ClientSMSAccounts
.Where(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
.Skip(1)
.FirstOrDefault();