1

考虑以下示例,在所有这些示例中,我试图将具有已知 ID 的省/州的代码和名称放入单个字符串变量中,其格式类似于“CA-California”:

string stateName = _repository.States.Single(s => s.StateId == stateId).Name;
string stateCode = _repository.States.Single(s => s.StateId == stateId).Code;
string stateCodeName = stateCode + "-" + stateName;


var state = _repository.States.Single(s => s.StateId == stateId);
string stateCodeName = state.Code + "-" + state.Name;  


string stateCodeName = _repository.States.Where(s => s.StateId == stateId)
                                         .Select(s => s.Code + "-" + s.Name)
                                         .First();

在第一个示例中,只检索状态所需的属性,但代价是运行两个不同的查询。第二个示例只运行一个查询,但它检索状态的所有属性。第三个例子似乎没问题,但我的问题是,是否有一种方法可以使用 Single 和 First 方法从对象(或表中的列)中检索任意数量的属性,而不是全部或仅获取它们一次一个?

谢谢你

4

2 回答 2

1

我的问题是,是否有一种方法可以使用 Single 和 First 方法从对象(或表中的列)中检索任意数量的属性,而不是一次获取所有属性或仅获取一个属性?

您可以使用匿名类型来执行此操作:

var state = _repository.States.Where(s => s.StateId == stateId)
     .Select(s => new { Code = s.Code, Name = s.Name })
     .First();

这将返回一个具有两个属性的匿名类型:CodeName

(如果有多个匹配项,您是否使用First()Single()取决于您希望程序的行为方式。如果有多个匹配项,Single()则会引发异常。)

于 2012-12-26T18:06:28.373 回答
0

First()如果您要在第三个示例中更改 to 的使用Single(),您将得到您正在寻找的查询。

该查询将仅返回您期望的单个结果,并且只会返回您感兴趣的字段(已连接)。

于 2012-12-26T18:03:18.753 回答