Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中的Sql字符(13)和isnull的替换是什么?_C#_Sql_Entity Framework - Fatal编程技术网

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。