C# Lambda SQL查询/在查询或结果后操作字符串
我正在对SQL使用C#、EF5和Lambda样式的查询 我有一个通常的场景,将数据绑定到GridView。我的列的某些结果可能太长(字符计数),因此我只想显示前“n”个字符。让我们假设这个例子有10个字符。当我截断一个结果时,我想通过附加“…”来表示这一点。假设返回了以下姓氏: 美世、史密斯、加西亚·琼斯 我希望它们能像这样被退回: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
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构造。