【问题标题】:Find where row value is inside a list查找行值在列表中的位置
【发布时间】:2015-06-10 14:05:15
【问题描述】:
CompanyList companyList = new CompanyList();
companyList.matchCompanies();
CompanyListObject[] companyListObject = companyList.companyList;

List<double> companylist = new List<double>();
foreach (var company123 in companyListObject)
{
    if (company123.parentCompany == companyID)
    {
        companylist.Add(company123.companyID);
    }
}

IEnumerable<RaCallRatesMatched> items = 
    db.RaCallRatesMatched.Where(row => row.accountcode == companyIDDouble);

我想提取列表中存在行值的结果。基本上,我的列表包含所有公司 ID。这是一个相当短的列表,有些是 3-5 个元素长。而不是检查该行是否仅等于列表值之一。我可以检查它是否等于更多?

请记住,我不能在固定上下文中使用|| 语句,因为列表大小会有所不同。例如与List[0] || List[1] || List[2]比较太固定了,如果太长我会得到一个异常。

我不能对数据库进行多次调用,因为每次调用都是针对需要很长时间才能构建的视图。我可以一次通话吗?

【问题讨论】:

  • 最好在 SQL 查询中执行此检查,这样您就不会返回太多不必要的数据,以至于您必须过滤掉。您可以发布您正在使用的视图的查询和一些示例数据吗?
  • 感谢火星人。问题是数据库不包含所有必要的数据,需要输入。

标签: sql arrays entity-framework entity


【解决方案1】:

使用.Any()

例如

MyCompanyList.Any(x => x.Equals(MyCompanyName));

在此示例中,MyCompanyList 是字符串列表。这也可以应用于整数列表。等等

您可以比较复杂类中的任何参数,或任何类型的有效相等性检查。

更多示例:http://www.dotnetperls.com/any

【讨论】:

  • 我想从数据库中提取而不是从我的列表中提取。
  • 您可以将 .Any 应用于数据库中的实体。
【解决方案2】:
IEnumerable<RaCallRatesMatched> items = db.RaCallRatesMatched.Where(row => companylist.Any(y => y == row.accountcode));

这行得通。感谢 Doomsknight 和我的几个同事!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多