Linq Query C#仅返回第一个值

时间:2018-01-09 02:07:34

标签: c# linq

我正在尝试从数据库中检索所选记录,但总是返回第一条记录

这是我的问题:

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

4 个答案:

答案 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);

我认为问题在于companyIdClientSMSAccountModal.CountryID不包含您认为的值。也许可以尝试对它们进行编码,然后开始查看你得到的内容。

答案 3 :(得分:0)

如果您想在第二个记录的另一个答案中给出评论,则需要在致电Skip(1)之前使用FirstOrDefault()(假设您可以保证至少有1记录)

ClientSMSAccounts
.Where(x => (x.CompanyID == companyId) && (x.CountryID == ClientSMSAccountModal.CountryID))
.Skip(1)
.FirstOrDefault();
相关问题