Visual Studio 2008 | Silverlight 3 | SQL Server 2005 | 域服务类| 实体数据模型
我有一个数据库表“ Students”,其中包含FirstName,LastName,Semester,ProgramOfStudy,Column等列。
我们的目标是返回一个 总计 (按姓氏的第一个字母分组学生人数)的基础上,在一个给定的所有学生的姓氏的第一个字母 学期 和 Programofstudy 。
我编写LINQ查询失败,并认为我会尝试使用SQL视图。
作为Linq;
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; }
当使用在MSSMS中填充参数的sql运行时,该视图会向下过滤至25行,以报告事件计数。AZ,未报告X,因为没有以X开头的姓氏。
如果在返回查询上设置了一个断点,则它正确地报告一个实体计数为24,但是每个实体都是相同的。LastNamesStartsWith =’A’,总计= 21。
因此,似乎过滤正在工作,但存在错误。每个实体都应是唯一的可用区。
如果我添加到.Where像这样
where (s.programCode == progCode) && (s.academicPeriod == cycleID) && (s.LastNameStartsWith == "B");
生成正确的退货。B,35,200890,BSED-ELED-ED
当使用Linq返回元素时,我得到一个可用的元素。LastNameStartsWith =“ A”,总计=21。但是,再次返回B-Z,并且不返回总计。在域服务类中,它确实报告元素数为24。它们都去了哪里。即使他们都报告了A和21,我也应该再获得23个元素。
那么在使用View和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); } }
使用Entity Framework处理视图时,请确保正确设置了实体键。由于视图没有主键,EF会尝试推断该键,因此它通常是不正确的,因此常常被忽略。实体关键字不正确会导致查询结果不一致和奇怪。