在 Linq 查询中连接字符串

本文关键字:连接 字符串 查询 Linq | 更新日期: 2023-09-27 18:36:49

我有一个数据库调用,它返回了一个对象。我使用 linq 以我想要的方式强制转换该对象

var result = queryResult.OrderBy(c => c.TariffName)
                        .Take(count)
                        .Select(c => new
                            {
                                Text = c.TariffName,
                                Key = c.TariffId,
                                Price = c.LineRental
                            });
var list = result.ToList();

我现在想将线路租金添加到关税名称中,显示如下所示:

我的资费 - 12.99

当我尝试这样做时,尽管我可以正常进行此更改:

Text = c.TariffName + " - ",

但是当我尝试添加行租赁时,我遇到了 linq 无法识别 ToString() 的问题。我需要它看起来像:

Text = c.TariffName + " - " + c.LineRental.ToString(),
我知道 linq 无法识别读取 LINQ 到 Entities 的 ToString() 方法,它无法

识别方法"System.String ToString()"方法,并且此方法无法转换为存储表达式,但是鉴于我无法在 linq 查询之前将其设置为字符串,我该如何更改它?

在 Linq 查询中连接字符串

首先将查询结果转换为列表,然后使用 select 使toString正常工作。

var result = queryResult.OrderBy(c => c.TariffName)
                        .Take(count);
var list = result.ToList().Select(c => new
                            {
                                Text = c.TariffName + " - " + c.LineRental.ToString(),
                                Key = c.TariffId,
                                Price = c.LineRental
                            });
发生了什么

linq 尝试在数据库查询级别执行您的 select 语句,但它不知道如何将您的 .Select lambda 转换为 SQL 语句的一部分select

您可以做的最简单的事情是首先查询必填字段,在查询时调用.ToList()来执行它,然后执行投影。

var result = queryResult.OrderBy(c => c.TariffName)
                    .Take(count)
                    .Select(c => new
                        {
                            Text = c.TariffName,
                            Key = c.TariffId,
                            Price = c.LineRental
                        });
var list = result.ToList().Select(c=>new {
          Text = string.Format("{0} - {1}", c.Text, c.Price),
          Key=Key,
          Price=Price
});