我有一個三列的表。兩列組成了PK。該表存儲有關目錄中文件的信息。獲得IQueryable集之間的區別
我有一個文件目錄作爲我的輸入。
目標是獲取添加的文件和刪除的文件的列表。
我有以下代碼:
string uri = "ftp://ftp.myftpsite.com/files";
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
using (myEntities context = new myEntities())
{
IQueryable<ITEM> storedItems = from item in context.ITEMs where item.YEAR == "2013" select item;
List<ITEM> currentItemList = new List<ITEM>();
string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line) && line.EndsWith(".htm"))
{
ITEM item = new ITEM();
item.YEAR = line.Substring(0,4);
item.NUM = line.Substring(7,5);
currentItemList.Add(item);
line = streamReader.ReadLine();
}
IQueryable<ITEM> currentItems = currentItemList.AsQueryable<ITEM>();
IQueryable<ITEM> newItems = from item in currentItems where !(from storedItem in storedItems select storedItem.YEAR + storedItem.NUM).Contains(item.YEAR + item.NUM) select item;
IQueryable<ITEMS> removedItems = from item in storedItems where !(from currentItem in currentItems select currentItem.YEAR + currentItem.NUM).Contains(item.YEAR + item.NUM) select item;
List<ITEM> newItemsList = newItems.ToList();
List<ITEM> removedItemsList = removedItems.ToList();
}
到底newItems
應該是在FTP站點的項目,而不是數據庫和removedItems
應該在數據庫中,而不是在FTP站點的項目。
的newItems
作品,但是下面一行將返回一個錯誤: List<ITEM> removedItemsList = removedItems.ToList();
的錯誤是:
System.NotSupportedException: Unable to create a constant value of type 'MYProject.ITEM'. Only primitive types or enumeration types are supported in this context.
某處有問題,我的第二個LINQ查詢我想,但我不知道什麼。
此外,性能很重要,所以圍繞性能提出的建議值得歡迎。
目前的解決方案:
List<string> criteria = (from item in currentItemList select item.YEAR + item.NUM).ToList();
foreach(AMENDMENT a in storedItems)
{
if(!criteria.Contains(a.YEAR + a.NUM))
//do stuff here
}
所以基本上,而不是在LINQ做條件語句我做到了if語句在for循環中。我真的認爲它很醜,但它有兩個好處。
它的工作原理
相反FO以3秒左右,如LINQ查詢是,它需要一秒鐘的百分之幾。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
爲什麼它對newItems查詢而不是removedItems查詢起作用?他們本質上是相同的查詢? – kralco626