C# 实体框架中的Sql字符(13)和isnull的替换是什么?
我不熟悉实体框架,任何人都可以告诉我如何将以下查询写入实体框架C# 实体框架中的Sql字符(13)和isnull的替换是什么?,c#,sql,entity-framework,C#,Sql,Entity Framework,我不熟悉实体框架,任何人都可以告诉我如何将以下查询写入实体框架 select column1 + char(13) +isnull(column2,space(1))+char(13)+isnull(column3,space(1))+char(13)+isnull(column4,space(1)) +char(13)+isnull(olumn5,space(1)) as FADRS FROM table 将上述查询转换为实体框架 通过使用Jon答案,我得到了答案。知道我的问题是如何使用iq
select column1 + char(13) +isnull(column2,space(1))+char(13)+isnull(column3,space(1))+char(13)+isnull(column4,space(1)) +char(13)+isnull(olumn5,space(1)) as FADRS
FROM table
将上述查询转换为实体框架
通过使用Jon答案,我得到了答案。知道我的问题是如何使用iqueryable吗
IQuer<string> Madr = from b in context.table
where b.column1 == txtaddrss.Text
select new
{FADR = b.column2 + '\r' +
(b.column3 ?? " ") + '\r' +
(b.column4 ?? " ") + '\r' +
(b.column5 ?? " ") + '\r' +
(b.column6 ?? " ")};
foreach(string something in Madr)
{
MessageBox.Show(something);
}
我得到的错误转换失败,因为匿名类型如果没有进一步的上下文,我会这样说:
var query = from obj in context.table
select new {
FADR = obj.column1 + "\r" +
obj.column2 ?? " " + "\r" +
obj.column3 ?? " " + "\r" +
obj.column4 ?? " " + "\r" +
obj.column5 ?? " " + "\r" };
char13只是做了与C中char13相同的事情,尽管受到了更多的限制,它只返回'\r'
因此,您可以使用“\r”或\r
isnullx,y只是x的等价物??y在C
因此,您可以使用以下内容:
var query = from item in TableSource select
item.column1 + '\r' +
(item.column2 ?? " ") + '\r' +
(item.column3 ?? " ") + '\r' +
(item.column4 ?? " ") + '\r' +
(item.column5 ?? " ");
TableSource是您获取对表context.table的引用的任何方式
查询将是一个IQueryable,在调用时返回相关字符串。如果确实需要示例中的FADRS名称,则以下内容将代替字符串返回具有FADRS属性的匿名对象:
var query = from item in TableSource select
new {FADRS = item.column1 + '\r' +
(item.column2 ?? " ") + '\r' +
(item.column3 ?? " ") + '\r' +
(item.column4 ?? " ") + '\r' +
(item.column5 ?? " ")};
编辑:
上述第一个示例可用作:
foreach(string something in query)
MessageBox.Show(something);
第二个例子是:
foreach(var something in query)
MessageBox.Show(something.FADR);
第一个var是可选的缩写,第二个var必须使用var,因为所涉及的类型是匿名的,因此var是通过根本不命名来命名类型的唯一方法。基本上您不会这样做。您可以使用原始sql,但这样您的设计就会变得脆弱。可能是一个视图或存储过程,但我想我只是在客户端进行。你能解释一下如何使用Iqueryable吗。我正在尝试,但并没有像查询{dosomethingx;}中的IEnumerable:foreachvar x那样获得。与IEnumerable不同,如果您进一步应用LINQ方法,如Select、Where等,那么它将改变最终转换为SQL的查询,而不是在内存中执行。例如,如果在query.Wheres.Length>20Console.WriteLines中使用foreachstring s,则使用上述第一个示例;那么SQL与您的SQL相同,但是添加了lencolumn1+char13+isnullcolumn2、space1+char13+isnullcolumn3、space1+char13+isnullcolumn4、space1+char13+isnullcolumn5、space1>20。。。一般来说,您不想使用IEnumerable-only,除非您需要在内存中执行某些只能执行的操作,但也有例外,但这是一个很好的指导原则,因为IQueryable被转换成所需的SQL这一事实使得基于Linq的对象关系转换方法在许多情况下接近手工编码的SQL。最主要的是,您混合了我的第一个示例的一部分,该示例生成IQueryable,第二个示例生成IQueryable,其中T是匿名类型,因此无法命名,因此必须使用var。