Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
在域服务类和实体数据模型中使用Linq查询SQL视图_Sql_Linq_Views_Ria - Fatal编程技术网

在域服务类和实体数据模型中使用Linq查询SQL视图

在域服务类和实体数据模型中使用Linq查询SQL视图,sql,linq,views,ria,Sql,Linq,Views,Ria,Visual Studio 2008 | Silverlight 3 | SQL Server 2005 |域服务类|实体数据模型 我有一个数据库表“Students”,其中有列FirstName、LastName、Semmer、ProgramOfStudy、Column等 目标是根据给定的学期和学习计划中所有学生的姓氏首字母,返回一个总数(按姓氏首字母分组的学生人数) 我没有成功地编写LINQ查询,我想尝试使用SQL视图 创建视图(17000行分组到5000行) 视图由“LastNameSta

Visual Studio 2008 | Silverlight 3 | SQL Server 2005 |域服务类|实体数据模型

我有一个数据库表“Students”,其中有列FirstName、LastName、Semmer、ProgramOfStudy、Column等

目标是根据给定的学期和学习计划中所有学生的姓氏首字母,返回一个总数(按姓氏首字母分组的学生人数)

我没有成功地编写LINQ查询,我想尝试使用SQL视图

  • 创建视图(17000行分组到5000行)
  • 视图由“LastNameStartsWith”、“Total”、“AcademicPeriod”、“ProgramCode”组成
  • 将视图添加到.edmx模型中
  • 编写了以下查询
  • 作为林克

    public IQueryable GetVw_studentAlphabetSet(int cycleID, string progCode)
         {
              var query = from s in db.vw_studentAlphabetSet
              where ((s.programCode == progCode) && (s.academicPeriod == cycleID))
              select s;
              return query; 
    }
    
    
    当以sql形式运行并在MSSMS中填充参数时,视图将过滤到25行,以报告发生次数。A-Z,不报告X,因为没有以X开头的姓氏

    如果在返回查询上设置了断点;,它正确地报告了24个实体计数,但每个实体都是相同的。lastnamestartswith='A',总计=21

    因此,似乎过滤正在工作,但有一个bug。每个实体都应该是唯一的A-Z

    如果我把它加进去,你喜欢在哪里

    
    where (s.programCode == progCode) && (s.academicPeriod == cycleID) && (s.LastNameStartsWith == "B");
    
    生成正确的返回。B、 35200890,BSED-ELED-ED

    当使用Linq返回元素时,我得到一个微不足道的元素来使用。LastNameStartsWith=“A”,总计=21。但是同样的,B-Z和总数没有返回。在DomainServices类中,它确实报告了元素计数为24。他们都去了哪里。我本应该多得到23个元素,即使他们都报告A和21

    那么,在使用视图和Linq时,您是否应该知道一些特别的事情

    这里是实体模型的设计器

    
    [assembly: global::System.Data.Objects.DataClasses.EdmSchemaAttribute()]
    
    // Original file name:
    // Generation date: 2/21/2010 10:25:00 PM
    namespace sproc.Web
    {
    
        /// 
        /// There are no comments for GLADYS_2010Entities in the schema.
        /// 
        public partial class GLADYS_2010Entities : global::System.Data.Objects.ObjectContext
        {
            /// 
            /// Initializes a new GLADYS_2010Entities object using the connection string found in the 'GLADYS_2010Entities' section of the application configuration file.
            /// 
            public GLADYS_2010Entities() : 
                    base("name=GLADYS_2010Entities", "GLADYS_2010Entities")
            {
                this.OnContextCreated();
            }
            /// 
            /// Initialize a new GLADYS_2010Entities object.
            /// 
            public GLADYS_2010Entities(string connectionString) : 
                    base(connectionString, "GLADYS_2010Entities")
            {
                this.OnContextCreated();
            }
            /// 
            /// Initialize a new GLADYS_2010Entities object.
            /// 
            public GLADYS_2010Entities(global::System.Data.EntityClient.EntityConnection connection) : 
                    base(connection, "GLADYS_2010Entities")
            {
                this.OnContextCreated();
            }
            partial void OnContextCreated();
            /// 
            /// There are no comments for vw_studentAlphabet in the schema.
            /// 
            public global::System.Data.Objects.ObjectQuery vw_studentAlphabet
            {
                get
                {
                    if ((this._vw_studentAlphabet == null))
                    {
                        this._vw_studentAlphabet = base.CreateQuery("[vw_studentAlphabet]");
                    }
                    return this._vw_studentAlphabet;
                }
            }
            private global::System.Data.Objects.ObjectQuery _vw_studentAlphabet;
            /// 
            /// There are no comments for vw_studentAlphabet in the schema.
            /// 
            public void AddTovw_studentAlphabet(vw_studentAlphabet vw_studentAlphabet)
            {
                base.AddObject("vw_studentAlphabet", vw_studentAlphabet);
            }
        }
        /// 
        /// There are no comments for GLADYS_2010Model.vw_studentAlphabet in the schema.
        /// 
        /// 
        /// academicPeriod
        /// programCode
        /// 
        [global::System.Data.Objects.DataClasses.EdmEntityTypeAttribute(NamespaceName="GLADYS_2010Model", Name="vw_studentAlphabet")]
        [global::System.Runtime.Serialization.DataContractAttribute(IsReference=true)]
        [global::System.Serializable()]
        public partial class vw_studentAlphabet : global::System.Data.Objects.DataClasses.EntityObject
        {
            /// 
            /// Create a new vw_studentAlphabet object.
            /// 
            /// Initial value of academicPeriod.
            /// Initial value of programCode.
            public static vw_studentAlphabet Createvw_studentAlphabet(int academicPeriod, string programCode)
            {
                vw_studentAlphabet vw_studentAlphabet = new vw_studentAlphabet();
                vw_studentAlphabet.academicPeriod = academicPeriod;
                vw_studentAlphabet.programCode = programCode;
                return vw_studentAlphabet;
            }
            /// 
            /// There are no comments for Property LastNameStartsWith in the schema.
            /// 
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public string LastNameStartsWith
            {
                get
                {
                    return this._LastNameStartsWith;
                }
                set
                {
                    this.OnLastNameStartsWithChanging(value);
                    this.ReportPropertyChanging("LastNameStartsWith");
                    this._LastNameStartsWith = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true);
                    this.ReportPropertyChanged("LastNameStartsWith");
                    this.OnLastNameStartsWithChanged();
                }
            }
            private string _LastNameStartsWith;
            partial void OnLastNameStartsWithChanging(string value);
            partial void OnLastNameStartsWithChanged();
            /// 
            /// There are no comments for Property Total in the schema.
            /// 
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public global::System.Nullable Total
            {
                get
                {
                    return this._Total;
                }
                set
                {
                    this.OnTotalChanging(value);
                    this.ReportPropertyChanging("Total");
                    this._Total = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value);
                    this.ReportPropertyChanged("Total");
                    this.OnTotalChanged();
                }
            }
            private global::System.Nullable _Total;
            partial void OnTotalChanging(global::System.Nullable value);
            partial void OnTotalChanged();
            /// 
            /// There are no comments for Property academicPeriod in the schema.
            /// 
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public int academicPeriod
            {
                get
                {
                    return this._academicPeriod;
                }
                set
                {
                    this.OnacademicPeriodChanging(value);
                    this.ReportPropertyChanging("academicPeriod");
                    this._academicPeriod = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value);
                    this.ReportPropertyChanged("academicPeriod");
                    this.OnacademicPeriodChanged();
                }
            }
            private int _academicPeriod;
            partial void OnacademicPeriodChanging(int value);
            partial void OnacademicPeriodChanged();
            /// 
            /// There are no comments for Property programCode in the schema.
            /// 
            [global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
            [global::System.Runtime.Serialization.DataMemberAttribute()]
            public string programCode
            {
                get
                {
                    return this._programCode;
                }
                set
                {
                    this.OnprogramCodeChanging(value);
                    this.ReportPropertyChanging("programCode");
                    this._programCode = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false);
                    this.ReportPropertyChanged("programCode");
                    this.OnprogramCodeChanged();
                }
            }
            private string _programCode;
            partial void OnprogramCodeChanging(string value);
            partial void OnprogramCodeChanged();
        }
    }
    
    下面是调用域服务和实体模型的客户端代码

    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Ria.Data;
    using GLADYS.Web.GladysDataLayers;
    using GLADYS.Web.GladysServices;
    
    
    namespace GLADYS
        {
        public partial class uc_AlphabetFilter : UserControl
            {
    
            //data context for getting the data through the ria service.
            private dscStudents ctx = new dscStudents();
    
    
    
    
            public uc_AlphabetFilter()
                {
                InitializeComponent();
                //Loaded += new RoutedEventHandler(uc_AlphabetFilter_Loaded);
                ctx.Load(ctx.GetVw_studentAlphabetSetQuery(200980, "BSED-ELED-ED")).Completed += new EventHandler(uc_AlphabetFilter_Completed);            
                }
    
    
    
    
    
            void uc_AlphabetFilter_Completed(object sender, EventArgs e)
                {
                foreach (var q in ctx.vw_studentAlphabets)
                    {
                    uc_AlphaButton btn = new uc_AlphaButton();
                    btn.pAlphaLetter = q.LastNameStartsWith;
                    btn.PNumber = q.Total.Value;
    
                    myWrapPanel.Children.Add(btn);
                    }
                }
    

    同样的问题也会被问到,但方法不同。

    使用实体框架处理视图时,请确保正确设置了实体键。这一点经常被忽略,因为视图没有主键,EF试图推断主键,而这通常是不正确的。具有不正确的实体键可能会导致不一致和奇怪的查询结果。

    请向我们展示该视图的csdl、ssdl和映射,好吗?也许设计师在那里搞砸了。kubal5003,我添加了客户端代码和服务器端EDMX设计器代码。我真的希望你能看到一些东西。在我关于这个问题的另一篇文章中,它与LINQtoSQL和WCF服务一起工作得非常好。我不是真的想中途换马,只是想确保我没有发疯。