0

使用名为 Costcenter 的数据库 TABLE。我试图在下拉列表中显示 Costcenters,其中 CostcenrCode 只有三个数字字符。我试图在 ASP.Net WF 应用程序的 VIEW 上执行此操作。现在我已将其移至使用 LINQ to SQL 的 DataAccess 查询。我有点困惑,如何在我返回字符串的 LINQ 查询中做到这一点。我在最后选择 cc 填充数据库表中的所有成本中心。但我只需要拉一个就好了(例如100而不是F.C56)。

我的数据访问代码如下:

    public static IEnumerable<Costcenter> GetAllCostcentersByCountryCompanyProfitcenterYear(short year, int companyID)
    {
        List<Costcenter> costcenters = new List<Costcenter>();
        using (var context = new CostReportEntities())
        {
            costcenters = (from cc in context.Costcenters
                           join company in context.Companies on cc.CompanyID equals company.CompanyID
                           where cc.Year == year && cc.CompanyID == companyID
                           select cc).ToList();

        }
        return costcenters;

    }

我一直在这里查看一些帖子,但由于我是 LINQ to SQL 的新手,所以无法将任何内容放在一起。

4

3 回答 3

1

这可能会奏效:

var costcenters = (from cc in context.Costcenters
                    join company in context.Companies on cc.CompanyID equals company.CompanyID
                    where cc.Year == year && cc.CompanyID == companyID &&
                       SqlMethods.Like(cc.CostcenrCode, "[0-9][0-9][0-9][^0-9]%")
                    select cc).ToList();

来源:

LINQ to SQL 查询以确定值是否以数字开头


编辑 1 - 添加替代解决方案,使用SqlMethods.PatIndex

var costcenters = (from cc in context.Costcenters
                    join company in context.Companies on cc.CompanyID equals company.CompanyID
                    where cc.Year == year && cc.CompanyID == companyID &&
                       SqlMethods.PatIndex("[0-9][0-9][0-9][^0-9]%", cc.CostcenrCode) > 0
                    select cc).ToList();
于 2013-02-11T16:37:56.020 回答
1

您可以使用Regex.Match,但您需要先具体化您的数据。你说,这是下拉列表的数据,所以这个解决方案可能是可以接受的:

costcenters =  (
        from cc in context.Costcenters
        join company in context.Companies on cc.CompanyID equals company.CompanyID
        where cc.Year == year && cc.CompanyID == companyID
        select cc
    ).AsEnumerable()
    .Where(cc => Regex.IsMatch(cc.CostcenrCode, @"^\d{3}$"))
    .ToList();

这里的技巧在于AsEnumerable()枚举您的数据的方法,之后您可以对您的数据应用正则表达式方法。

于 2013-02-11T16:53:18.203 回答
-1
using System.Text.RegularExpressions;
    ...
costcenters = (from cc in context.Costcenters
                    join company in context.Companies on cc.CompanyID equals company.CompanyID
                    where cc.Year == year && cc.CompanyID == companyID &&
                       Regex.IsMatch(cc.CostcenrCode, @"^\d{3}$");
                    select cc).ToList();
于 2013-02-11T15:57:10.943 回答