我试图通过这种方式获得子查询结果的字符串字段:
List<MyType> lstResult = dbContext.MyType
.Where(x=>x.MyStringField.StartsWith(dbContext.MyType.Where(y=>y.ID == 123).MyStringField));
结果是:
WHERE ( CAST(CHARINDEX([Project2].[MyStringField], [Extent1].[MyStringField]) AS int)) = 1
但这并没有使用类似的,并给我不正确的结果。
但是,如果我使用此查询:
List<MyType> lstResult = dbContext.MyType
.Where(x=>x.MyStringField.StartsWith("Abcd");
这是:
WHERE [Extent1].[MyStringField] LIKE 'Abcd%'
为什么在第一种情况下查询不使用类似的?在其他情况下,我使用这样的子查询,虽然使用ID(长类型字段)和查询os正确。当字段是一个字符串时,也许我会想念一些东西。
非常感谢。
答案 0 :(得分:1)
我认为这不会编译,因为Where语句甚至没有枚举为“Where”方法是一个Deferred方法,它不会返回任何结果,直到你使用像“Single,First”等方法枚举它。 ..“。
现在,将您的请求更改为:
// get the string that we want to check against.
var myStringField = dbContext.MyType.Single(y=>y.ID == 123).MyStringField; // <== you can use SingleOrDefault instead if you are not sure that the row is there, as this will throw exception if there is no MyType with id = 123.
List<MyType> lstResult = dbContext.MyType
.Where(x=>x.MyStringField.StartsWith(myStringField)).ToList();
希望这有帮助。