我一直在阅读MVVM,到目前为止发现它非常有趣.但是,我发现的大多数示例都适用于Windows应用程序,而不是Web应用程序.我也看到很多提到与Silverlight一起使用的MVVM,我知道Silverlight可以用于Web或Windows应用程序.
所以我的问题是 - MVVM是基于Web的应用程序的有效模式吗?如果是,UI必须是Silverlight吗?我正在决定将哪些技术用于我们需要设计的新中型网站,而Silverlight可能是对权力的强烈推销 - 尽管我们在幕后使用的技术并不重要非常.
任何人都可以在网络环境中使用MVVM提供的任何信息都将受到赞赏.示例代码也很棒.
我有一个WCF/REST Web服务,我正在考虑使用Linq to SQL从中返回数据库信息.
对表和返回行进行基本查询很容易,例如:
[WebGet(UriTemplate = "")]
public List<User> GetUsers()
{
List<User> ret = new List<User>(); ;
using (MyDataContext context = new MyDataContext())
{
var userResults = from u in context.Users select u;
ret = userResults.ToList<User>();
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想从多个表中返回数据或者与表的模式不完全匹配,该怎么办?我无法弄清楚如何从此查询返回结果,例如:
var userResults = from u in context.Users
select new { u.userID, u.userName, u.userType,
u.Person.personFirstname, u.Person.personLastname };
Run Code Online (Sandbox Code Playgroud)
显然,生成的行集不符合"用户"架构,因此我不能只转换为User对象列表.
我尝试在对象模型中创建一个与结果集相关的新实体,但它不想进行转换.
我错过了什么?
编辑:相关问题:存储过程返回的结果如何?同样的问题,将它们打包以通过服务返回的最佳方法是什么?
我需要从实体框架查询的结果中获取不区分大小写的列表.我有以下内容:
var myList = myEF.GroupBy(e => new { e.Code, e.Description })
.Select(e => e.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
这给了我一个独特的列表,但它区分大小写.我需要不区分大小写.
我想我应该可以这样做:
var myList = myEF.GroupBy(e => new { e.Code, e.Description }, StringComparer.InvariantCultureIgnoreCase)
.Select(e => e.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
但这似乎并不想与匿名对象一起使用.
添加.ToLower
或.ToLowerInvariant
似乎也不起作用.也没有使用Distinct(StringComparer.InvariantCultureIgnoreCase)
而不是GroupBy
.
似乎应该有一个简单的方法来做到这一点,但我找不到它.
我有一个客户要求将动画/平移图像添加到他们的网站.基本上,它是一个标准尺寸的图像,他想把它放在一个稍微窄一点的框架中,让图像从左到右平移,作为他网站上的视觉元素.不需要点击和拖动; 它基本上是一个从左到右的动画平移,然后重新开始另一张图片.
这是一个.NET页面,我有一堆Silverlight书籍坐在这里,我想要学习它.我觉得现在和任何人一样好,因为现在我真的有一个真实的用途.为了记录,我是.NET开发人员的经验,但除了阅读几本书的前几章之外,还没有玩过Silverlight.
所以......第一个问题,我假设这可能与Silverlight有关,我错了吗?
第二个问题,如果我能做到这一点,有人可以指出我在正确的方向上做到这一点需要哪些功能/控制/技术?我正在阅读深度变焦,但这似乎并不是我想要的.我只需要采用标准尺寸的jpeg/gif /无论文件,并从左到右缓慢平移.我需要学习哪些Silverlight功能/花一些时间学习才能做到这一点?
我是lambda表达的新手,只是遇到了一些我不理解的东西.
我有一个像这样的对象:
class MyListItem
{
string date; //date in the format "2010-12-05"
int Hour; //hour of day as an int
}
Run Code Online (Sandbox Code Playgroud)
我有一个这些对象的列表,代表一些日期和时间.
我想按日期和小时对此列表进行排序,所以我试试这个:
List<MyListItem> myList = new List<MyListItem>();
myList = getsomedata(); //populate list
myList.Sort((a, b) => (a.date + a.Hour.ToString()).CompareTo(b.date + b.Hour.ToString()));
Run Code Online (Sandbox Code Playgroud)
这是有效的.问题是小时是一个int,所以它有时不是2位数,导致这样的类型:
2010-12-05 1
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 2
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)
我希望它像:
2010-12-05 1
2010-12-05 2
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 21
2010-12-05 22
Run Code Online (Sandbox Code Playgroud)
所以我尝试格式化字符串以在我在lambda中解析之前添加零:
ret.Sort((a, b) => (a.date …
Run Code Online (Sandbox Code Playgroud) 我有一个WCF/REST Web服务,我正在尝试添加一个全局异常处理程序.我正在寻找类似于标准.NET网站中的Application_Error事件的东西.
我发现了很多关于使用IErrorHandler和IServiceBehavior的信息,如下所示:http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx#Y1479
这似乎是我需要的,但我发现的每个例子都假定该服务是在web.config中定义的.我不这样做 - 我正在使用在global.asax中配置的RouteTables,如下所示:
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
}
private void RegisterRoutes()
{
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHost2Factory(), typeof(myService)));
}
Run Code Online (Sandbox Code Playgroud)
那么,鉴于此,我如何配置我的自定义IErrorHandler和IServiceBehavior?我是否在正确的轨道上,因为我使用的是RouteTable,而不是通过web.config配置它?我对WCF很新....
我需要专门打开一个XML文件,进行修改并保存.
我可以打开它并很容易地进行修改:
DataSet ds = new DataSet();
ds.ReadXml(filename);
DataTable table = ds.Tables[0];
DataRow[] rows = table.Select("Inventory== 1");
DataRow row = rows[0];
row["Inventory"] = "2";
ds.WriteXml(filename);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但它不会锁定文件.我绝对需要锁定文件.
所以我尝试了一个流:
FileStream stream = File.Open(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
DataSet ds = new DataSet();
ds.ReadXml(stream);
DataTable table = ds.Tables[0];
DataRow[] rows = table.Select("Inventory== 1");
DataRow row = rows[0];
row["Inventory"] = "2";
ds.WriteXml(stream);
stream.Close();
Run Code Online (Sandbox Code Playgroud)
这会以独占方式打开文件,但是当它保存时,它会将XML附加到时间结束,它不会覆盖它,所以我最终得到的结果如下:
<Widgets>
<Widget Code="5" Number="10" Inventory="1" />
<Widget Code="6" Number="11" Inventory="15" />
<Widget Code="7" Number="12" Inventory="22" />
</Widgets>
<Widgets>
<Widget Code="5" Number="10" …
Run Code Online (Sandbox Code Playgroud)