Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lambda SQL查询/在查询或结果后操作字符串_C#_Sql_Entity Framework_Lambda - Fatal编程技术网

C# Lambda SQL查询/在查询或结果后操作字符串

C# Lambda SQL查询/在查询或结果后操作字符串,c#,sql,entity-framework,lambda,C#,Sql,Entity Framework,Lambda,我正在对SQL使用C#、EF5和Lambda样式的查询 我有一个通常的场景,将数据绑定到GridView。我的列的某些结果可能太长(字符计数),因此我只想显示前“n”个字符。让我们假设这个例子有10个字符。当我截断一个结果时,我想通过附加“…”来表示这一点。假设返回了以下姓氏: 美世、史密斯、加西亚·琼斯 我希望它们能像这样被退回: using (var context = new iaiEntityConnection()) { var query = context.applicat

我正在对SQL使用C#、EF5和Lambda样式的查询

我有一个通常的场景,将数据绑定到GridView。我的列的某些结果可能太长(字符计数),因此我只想显示前“n”个字符。让我们假设这个例子有10个字符。当我截断一个结果时,我想通过附加“…”来表示这一点。假设返回了以下姓氏:

美世、史密斯、加西亚·琼斯

我希望它们能像这样被退回:

using (var context = new iaiEntityConnection())
{
    var query = context.applications.Where(c => c.id == applicationPrimaryKey);               
    var results = query.ToList();

    foreach (var row in results)
    {
        if (row.employerName.Length > 10)
        {
            row.employerName = row.employerName.Substring(0, Math.Min(10, row.employerName.ToString().Length)) + "...";
        }

        if (row.jobTitle.Length > 10)
        {
            row.jobTitle = row.jobTitle.Substring(0, Math.Min(10, row.jobTitle.ToString().Length)) + "...";
        }
    }

    gdvWorkHistory.DataSource = results;
    gdvWorkHistory.DataBind();
var query2 = context.applications.Select(c => new
{
    c.id,
    c.applicationCode,
    c.applicationCategoryLong,
    c.applicationType,
    c.renew_certification.PGI_nameLast,
    c.renew_certification.PGI_nameFirst,
    c.renew_certification.PAI_homeCity,
    c.renew_certification.PAI_homeState,
    c.reviewStatusUser,
    c.dateTimeSubmittedByUser
})
默瑟、史密斯、加西亚·乔恩

我是这样做的:

using (var context = new iaiEntityConnection())
{
    var query = context.applications.Where(c => c.id == applicationPrimaryKey);               
    var results = query.ToList();

    foreach (var row in results)
    {
        if (row.employerName.Length > 10)
        {
            row.employerName = row.employerName.Substring(0, Math.Min(10, row.employerName.ToString().Length)) + "...";
        }

        if (row.jobTitle.Length > 10)
        {
            row.jobTitle = row.jobTitle.Substring(0, Math.Min(10, row.jobTitle.ToString().Length)) + "...";
        }
    }

    gdvWorkHistory.DataSource = results;
    gdvWorkHistory.DataBind();
var query2 = context.applications.Select(c => new
{
    c.id,
    c.applicationCode,
    c.applicationCategoryLong,
    c.applicationType,
    c.renew_certification.PGI_nameLast,
    c.renew_certification.PGI_nameFirst,
    c.renew_certification.PAI_homeCity,
    c.renew_certification.PAI_homeState,
    c.reviewStatusUser,
    c.dateTimeSubmittedByUser
})
但是,如果我将查询更改为选择以下特定列:

using (var context = new iaiEntityConnection())
{
    var query = context.applications.Where(c => c.id == applicationPrimaryKey);               
    var results = query.ToList();

    foreach (var row in results)
    {
        if (row.employerName.Length > 10)
        {
            row.employerName = row.employerName.Substring(0, Math.Min(10, row.employerName.ToString().Length)) + "...";
        }

        if (row.jobTitle.Length > 10)
        {
            row.jobTitle = row.jobTitle.Substring(0, Math.Min(10, row.jobTitle.ToString().Length)) + "...";
        }
    }

    gdvWorkHistory.DataSource = results;
    gdvWorkHistory.DataBind();
var query2 = context.applications.Select(c => new
{
    c.id,
    c.applicationCode,
    c.applicationCategoryLong,
    c.applicationType,
    c.renew_certification.PGI_nameLast,
    c.renew_certification.PGI_nameFirst,
    c.renew_certification.PAI_homeCity,
    c.renew_certification.PAI_homeState,
    c.reviewStatusUser,
    c.dateTimeSubmittedByUser
})
如果选择了特定的列,则结果看起来是只读的,我真的应该只选择我需要的列。我正在失去编辑结果集的能力。 所以,我正在重新思考整个方法。在select上选择第一个“n”字符必须有一个距离,对吗?如果select上的长度>10,是否仍要附加“…”符号?这似乎更棘手。另外,我想我可以在绑定后解析gridview并进行调整。或者,在选择特定列时,是否有办法保持编辑结果集的能力

我欢迎你的想法。谢谢

引用

匿名类型提供了一种方便的方法,可以将一组只读属性封装到单个对象中,而无需先显式定义类型

所以,如果您想要读写功能,您必须定义一个类并选择它

e、 g

至于仅提供10个字符的限制,附加
。我假设您的意思是在applicationcategoryLog字段上,但是您可以在其他字段上使用相同的逻辑

var query2 = context.applications.Select(c => new
{
    c.id,
    c.applicationCode,
    applicationCategoryLong = (c.applicationCategoryLong ?? string.Empty).Length <= 10 ?
                                 c.applicationCategoryLong : 
                                 c.applicationCategoryLong.Substring(0,10) + "...",
    c.applicationType,
    c.renew_certification.PGI_nameLast,
    c.renew_certification.PGI_nameFirst,
    c.renew_certification.PAI_homeCity,
    c.renew_certification.PAI_homeState,
    c.reviewStatusUser,
    c.dateTimeSubmittedByUser
})
var query2=context.applications.Select(c=>new
{
c、 身份证,
c、 应用程序代码,

applicationCategoryLong=(c.applicationCategoryLong??string.Empty).Length因此您希望结果是可读写的,如果名称太长,您希望将其截断?这怎么能不删除数据库中的数据?我不会调用context.savechanges()在更新DB所需的结果集上。我只想更新绑定到gridview的结果。无可否认,可能有一种更优雅的方法来处理这个问题。如果我不选择特定列,我发布的技术可以很好地工作。DB没有问题。第二个代码片段中提供的逻辑非常有效。我真的需要了解这一点。我应该搜索什么主题来阅读这篇文章?让我试着翻译一下“applicationCategoryLong”上的转换***如果c.applicationCategoryLong为null,则使用String.Empty。如果此长度为@Matt close,则仅使用String.Empty进行比较检查,因此如果c.applicationCategoryLong为null,则结果值将为null。这只是为了防止长度检查中出现null引用异常。谢谢。看起来e和:是针对C#的,而不是针对EF和/或数据库查询的。对noob非常有帮助,这样他就不会用艰难的(er)方式做事了。:)@matt No problems
??
相当于TSql中的
ISNULL
,而
条件?真:假
相当于条件为真时的
情况,否则假结束
TSql构造。